2020-10-06

2020-10-07 11:01:02

Linux裝置樹語法

  1. 基本概念
    1.1 什麼是dts?
    ARM Device Tree起源於OpenFirmware (OF),在過去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥著大量的垃圾程式碼,相當多數的程式碼只是在描述板級細節,而這些板級細節對於核心來講,不過是垃圾,如板上的platform裝置、resource、i2c_board_info、spi_board_info以及各種硬體的platform_data。為了改變這種局面,Linux社群的大牛們參考了PowerPC等體系架構中使用的Flattened Device Tree(FDT),也採用了Device Tree結構,許多硬體的細節可以直接透過它傳遞給Linux,而不再需要在kernel中進行大量的冗餘編碼。導致ARM的merge工作量較大,其次ARM很多的程式碼都是垃圾,程式碼裡面有若干愚蠢的table,而多個人在維護這個table,從而導致了衝突。最後linux發出Gaah.Guys, this whole ARM thing is a f*cking pain in the ass.之後經過一些討論,對ARM平臺的相關code做出如下相關規範調整,這個也正是引入DTS的原因。
    本質上,Device Tree改變了原來用code方式將HW設定資訊嵌入到核心程式碼的方法,改用bootloader傳遞一個DB的形式。對於嵌入式系統,在系統啟動階段,bootloader會載入核心並將控制權轉交給核心,此外,還需要把上述的三個引數資訊傳遞給kernel,以便kernel可以有較大的靈活性。在linux kernel中,Device Tree的設計目標就是如此。
    在devie