設備樹我知道的有三種文件類型,dtbs是經過指令make dtbs編譯的二進制文件,供內核使用。node
基於一樣的軟件分層設計的思想,因爲一個SoC可能對應多個machine,若是每一個machine的設備樹都寫成一個徹底獨立的.dts文件。佈局
那麼勢必至關一些.dts文件有重複的部分,爲了解決這個問題,Linux設備樹目錄把一個SoC公用的部分或者多個machine共同的部分提煉爲相應的.dtsi文件。spa
這樣每一個.dts就只有本身差別的部分,公有的部分只須要"include"相應的.dtsi文件, 這樣就是整個設備樹的管理更加有序。設計
若是知道設備樹須要填寫哪些內容呢:code
1.看文檔,在內核Documentation/devicetree/bindings/目錄下有各類廠家的資料,源碼和文檔有些都是對應的:orm
使用指令,竟然找出來好多rockchip的文檔:blog
find Documentation/devicetree/bindings/ -name "*rockchip*"
2.參考同類型單板的設備樹文件教程
3.網上搜索ip
4.研究源碼文檔
DTS文件佈局(layout): /dts-v1/; [memory reservations] // 格式爲: /memreserve/ <address> <lenght>; / { // 根節點 [property definitions] [child nodes] }; 紅色部分,以下: Property格式1: [label:] property-name = value; 這個value有三種取值類型:<32位數據> "字符串" [16進製表示的1個/多個byte,一個byte必須用2位表示,byte之間的空格可省略]
第四種是多種組合,之間用逗號分開
Property格式2(沒有值): [label:] property-name; Devicetree node格式: [label:] node-name[@unit-address] { [properties definitions] [child nodes] };
示例:
a. Arrays of cells : cell就是一個32位的數據
interrupts = <17 0xc>;
b. 64bit數據使用2個cell來表示:
clock-frequency = <0x00000001 0x00000000>;
c. A null-terminated string (有結束的字符串):
compatible = "simple-bus";
d. A bytestring(字節序列):
local-mac-address = [00 00 12 34 56 78]; // 每一個byte使用2個16進制數來表示
local-mac-address = [000012345678]; //每一個byte使用2個16進制數來表示
e.能夠是各類值的組合,用逗號隔開:
compatible = "ns16550", "ns8250";
example = <0xf00f0000 19> "a strange property format";