天天看點

Linux 裝置樹(Device Tree)簡介

DTS (device tree source)

  .dts檔案是一種ASCII 文本格式的Device Tree描述,此文本格式非常人性化,适合人類的閱讀習慣。基本上,在ARM Linux在,一個.dts檔案對應一個ARM的machine,一般放置在核心的arch/arm/boot/dts/目錄。由于一個SoC可能對應多個machine(一個SoC可以對應多個産品和電路闆),勢必這些.dts檔案需包含許多共同的部分,Linux核心為了簡化,把SoC公用的部分或者多個machine共同的部分一般提煉為.dtsi,類似于C語言的頭檔案。其他的machine對應的.dts就include這個.dtsi。

DTC (device tree compiler)

  将.dts編譯為.dtb的工具。DTC的源代碼位于核心的scripts/dtc目錄,在Linux核心使能了Device Tree的情況下,編譯核心的時候主機工具dtc會被編譯出來,對應scripts/dtc/Makefile中的“hostprogs-y := dtc”這一hostprogs編譯target。

在Linux核心的arch/arm/boot/dts/Makefile中,描述了當某種SoC被選中後,哪些.dtb檔案會被編譯出來。

Device Tree Blob (.dtb)

  .dtb是.dts被DTC編譯後的二進制格式的Device Tree描述,可由Linux核心解析。通常在我們為電路闆制作NAND、SD啟動image時,會為.dtb檔案單獨留下一個很小的區域以存放之,之後bootloader在引導kernel的過程中,會先讀取該.dtb到記憶體。

将 dtb 反編譯成 dts

$ dtc -I dtb -O dts -o <devicetree name>.dts <devicetree name>.dtb       
$ dtc -I dtb -O dts <devicetree name>.dtb  > <devicetree name>.dts      

繼續閱讀