天天看點

linux核心裝置樹api,Linux裝置樹-記錄

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