1. 程式人生 > >從裝置樹的引入,能去分析的一些事

從裝置樹的引入,能去分析的一些事

Linux3.x後設備樹的引入(背後是Linus大神一聲吼:fucking code,詳細可以參考下http://www.wowotech.net/device_model/why-dt.html),大家可以多看看www.wowotech.net/中的文章,很犀利。

Linux裝置樹的引入個人覺得其實為了就是實現下面三點:

1、減少了核心為支援新硬體而需要的改變
2、提高程式碼重用,加速了Linux支援包的開發
3、使得單個核心映象能支援多個系統


從上面可以看出來,也就是Linux核心儘可能不需要修改,但是不同廠家或者開發者的板子
不可能都一樣的。那麼也就是說Linux核心對這些不同板子的支援,可以像平臺裝置那樣,
把記憶體的大小,外設的介面,傳給核心,核心進行接受處理從而啟動核心。


問:那麼什麼時候傳遞這些資訊就來?
答:啟動Linux系統(畢竟板子使用的時鐘,ddr,其他外設可能不一樣)


問:誰來傳遞這些資訊?
答:系統的啟動也就是三個部分:bootloader kernel rootfs
那麼也只能是bootloader中傳遞進來,簡單的說也就是u-boot

問: u-boot傳遞這些資訊進入,那麼Linux核心如何知道?
答:首先u-boot肯定要把這些資訊放入到某個地址,然後在把地址告訴Linnux核心。


問:這個地址有什麼限制?(針對於u-boot)
答:沒有,只要不覆蓋掉u-boot執行程式碼和即將啟動Linux核心所佔用的空間即可


問: 如何把地址告訴核心?(針對於u-boot)
答:使用bootm命令,形式:bootm [kernel] [rootfs] [devicetree] 
比如:bootm 40000000 - 4100000 (-表示無)

問:這些資訊用什麼來承載,最終需要變成二進位制燒寫到記憶體?
答:這些資訊叫做使用.dts檔案來承載,需要經過dtc編譯生成.dtb才能燒寫到記憶體


note: .dts檔案代表就是一個board,不同的板子相同的CPU的話,將會有很多資訊是一樣的,那麼使用.dtsi來描述
也就是說.dts包含.dtsi


知道上面這些東西,那麼就可以來想象下,既然最終要給kernel,也就說這段資訊傳遞過去後,
kernel得能夠明白是什麼東西。對於人類來說,就是約定。那麼對於程式來說,一樣可以約定好。
而這種約定,簡單來說就是標準,協議,語法等等,所以接下來,來學習下裝置樹的語法。