*********************************************
問題一:以前的linux kernel如何描述硬體,現在又如何描述呢?
在以前的核心版本中:
1)核心包含了對硬體的全部描述;
2)bootloader會載入乙個二進位制的核心映象,並執行它,比如uimage或者zimage;
3)bootloader會提供一些額外的資訊,成為atags,它的位址會通過r2暫存器傳給核心;
atags包含了記憶體大小和位址,kernel command line等等;
4)bootloader會告訴核心載入哪一款board,通過r1暫存器存放的machine type integer;
5)u-boot的核心啟動命令:bootm
6)barebox變數:bootm.image (?)
現今的核心版本使用了device tree:
1)核心不再包含對硬體的描述,它以二進位制的形式單獨儲存在另外的位置:the device tree blob
2)bootloader需要載入兩個二進位制檔案:核心映象和dtb
核心映象仍然是uimage或者zimage;
dtb檔案在arch/arm/boot/dts中,每乙個board對應乙個dts檔案;
3)bootloader通過r2暫存器來傳遞dtb位址,通過修改dtb可以修改記憶體資訊,kernel command line,以及潛在的其它資訊;
4)不再有machine type;
5)u-boot的核心啟動命令:bootm -
6)barebox變數:bootm.image,bootm.oftree
from source to binary
1)在arm系統中,所有的dts檔案放置在arch/arm/boot/dts中:
.dts檔案為板級定義
.dtsi檔案為soc級定義
2)device tree compiler工具,將源**編譯成二進位制形式;
它的源**放置在scripts/dtc中
3)編譯器會產生dtb檔案,bootloader會載入這個dtb檔案,核心在boot時去解析它;
4)arch/arm/boot/dts/makefile會指定產生哪個dtb檔案;
上圖是pdf裡面自帶的例子,我再從arch/arm/boot/dts/am33***.dtsi中摘錄了兩個:
uart0: serial@44e09000 ;
uart1: serial@48022000 ;
對比中的注釋,就能夠知道對於uart0這個外設:
node name: serial
unit address: 0x44e09000
compatible: 定義了裝置的programming model,允許作業系統識別對應的程式驅動;
clock-frequency: 48000000,晶振頻率為24mhz,這應該是pll倍頻後的輸出(?);
reg: 暫存器的位址和暫存器長度,uart0的位址起始為0x44e09000,長度為0x2000;
interrupts: 中斷號;
status: 狀態值,初始的時候為disabled,即禁用它;
*********************************************
問題三:device tree的編寫規則是怎樣的?
1)device tree inclusion不一定要做成monolithic,它們可以分散在不同的檔案中,互相包含;
2).dtsi檔案是被包含的,.dts檔案才是最終的device trees;
3).dts檔案包含了板級資訊;
4)including工作主要是將including file覆蓋到included file上面;
5)inclusion使用dt操作符/include/,或者在某些少量的核心發布版中,由於dts是使用了c preprocessor,因此推薦#include。
1) a precise compatible string is better than a vague one.
參考文獻:
AM335X中的DTS簡單介紹
linux核心在2011年後開始轉換到dts配置的方式。詳細的device tree source 裝置樹 相關的文件請參考documentation devicetree bindings相關文件。其中提到dts可以很多人會比較陌生。其實不用陌生,很多人知道.config檔案吧。其實dts檔案有點...
Am335x 啟動過程
啟動順序 針對ti oma3 evm linux一般的啟動順序是 上電的時候,omap裝置最開始的boot是從cpu內部的boot rom起來,這部分的 是出廠的時候固化的,不能被改變的。boot rom通過讀取外部boot pin的配置來尋找第乙個外部bootloader。可以尋找的裝置有nand...
Am335X編譯除錯環境搭建
am335x編譯除錯環境搭建 可以參考 1,配置伺服器端的編譯環境,參見sitara linuxsdk sdg 05.04.01.00.pdf p239 sitara linux sdk gcc toolchain 這裡由於是同事已經搭好環境,所以沒法確認細節問題 2,寫一段測試c include ...