AM335x裝置樹DTS移值

2021-08-28 06:51:43 字數 2027 閱讀 3260

*********************************************

問題一:以前的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 ...