1.名詞:
dt
dts
dtsi
dtb
dtc
将DTB反編譯成dts,dtc -I dtb -O dts -o ABC.dts arch/arm/boot/ABC.dtb
同名節點的處理政策:将内容做集合,名字用最後的那個節點名字。
2.基本文法
1)dts檔案以/做為根節點開始,{};之中包含子節點和屬性,子節點還可以包含子節點和屬性
2)不同級的節點内可有有相同的節點名和屬性名
3)結束标志:節點結束符{}後必須以“;”号結束,節點屬性值必須以“;”号結束
4)支援C風格和C++風格“//...”注釋
5)dts檔案本身中可以通過#include包含其他.dtsi檔案和.h檔案
6).dtsi檔案本身也可以通過#include包含其他.dtsi和.h
7)DT規範中沒有規定節點名和屬性的含義
8)DT應用于Linux核心驅動這類特定的場景下,某些節點和屬性有特定意義(約定俗成)
9)不論.dts還是.dtsi檔案都可以定義節點,并且都是在“/”根節點之下,最終在編譯生成.dtb檔案時合并成一個根節點
3.特殊節點
1)根節點
2)aliases節點 - 節點别名,節點标簽
3)chosen節點 - 啟動參數
4)memory節點 - 記憶體布局,
4.标準熟悉
model
根的compatible,核心要解析的,表示一個闆子
cpu的compatible
裝置節點的compatible,會和驅動裡的compatible比較比對
二級節點 -- 平台裝置, platf_driver.driver.of_match_table.compatible
三級節點 -- i2c spi
phandle
status -- 決定這個裝置是否可以工作, “okay”“disabled”“fail”“fail-sss”
reg=
address-cells - 0,1,2表示幾個32bit單元表示位址,決定他的子節點
size-cells - 0,1,2表示幾個32bit單元表示size大小
device-type
range -- 父子空間的映射
中斷 -- interrupt-controller, interrupt-cells, interrupt-parent
gpio屬性
5.DT的用途:
1)平台識别 compatible,來識别是否是自己的支援的平台
2)運作時配置
3)裝置植入
6. API -- dt讀到的都是大端模式
of_find_node_by_path("path")
of_find_node_by_name(start_node, name)
of_find_node_by_type() -- for cpu
of_find_property(node, name, len)
of_get_property()
of_property_read_u8/16/32