[DTS]設備樹基本概念

最近在總結一些關於設備樹相關的知識,對於做驅動這一塊的人應該都會接觸到。平常可能很多人移植驅動時也會去改dts文件,但是很多人都是按照模板改,或者網上找過來改,知其然不知其所以然。

在Linux3.x之前的內核源碼中,存在大量對板級細節信息描述的代碼。這些代碼充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目錄。為了解決這個問題而引入設備樹。
官方對設備樹的描述是,一種描述硬件資源的數據結構。它通過bootloader將硬件資源傳給內核,使得內核和硬件資源描述相對獨立。
設備樹的主要優勢:對於同一SOC的不同主板,只需更換設備樹文件.dtb即可實現不同主板的無差異支持,而無需更換內核文件。

設備樹包含DTC(device tree compiler),DTS(device tree source和DTB(device tree blob)。
DTS: dts文件是對Device Tree的描述,放置在內核的/arch/arm/boot/dts目錄。一個*.dts文件對應一個ARM的machine。dts文件描述了一個板子的硬件資源。以前寫在mach-xxx文件中的內容被轉成了dts文件。
DTC: DTC為編譯工具,它可以將.dts文件編譯成.dtb文件。
DTB: DTC編譯*.dts生成的二進制文件(.dtb),bootloader在引導內核時,會預先讀取.dtb到內存,進而由內核解析。
設備樹中還有一種文件 ------- dtsi文件,由於一個SOC可能有多個不同的電路板,而每個電路板擁有一個 .dts。這些dts勢必會存在許多共同部分,為了減少代碼的冗余,設備樹將這些共同部分提煉保存在.dtsi文件中,供不同的dts共同使用。

設備樹文件在kernel源碼中,難道是像驅動一樣編譯進內核嗎?其實不是的,上面我們說了dts會最終編譯成dtb文件。然后上電之后BootLoader就會將設備樹在內存中的地址傳給內核。然后內核去解析和讀取對應的硬件資源。所以要支持設備樹不僅僅需要內核支持,BootLoader也要支持。
這篇文章只是提一些基本概念,后面會再寫幾篇文章來講解設備樹相關的東西。
歡迎加入QQ群聊
如果你喜歡就請分享給你的朋友,感謝大家的支持