2014-01-09 83 views
8

設備樹和ATAG之間有什麼區別?另外,ATAG是必須的,內核是否期望它們處於固定地址,還是期望它們在r0-r3中?ARM Linux Atags與設備樹

回答

12

設備樹描述了內核用於選擇加載哪些驅動程序,所有MMIO接口在哪裏等的運行時硬件的所有內容。 ATAG只是描述了在哪裏可以找到initrd和內核參數,內存等等 - 關於機器的所有其他內容都被硬編碼到內核中。

現在的首選方法是使用設備樹而不是ATAG。其中一個優點包括添加新平臺並不總是需要向內核添加新代碼的事實。

要回答你的第二個問題,如果你已經閱讀文檔booting Linux on the ARM platform,你會發現內核期望下被放置在寄存器控制權移交給內核之前:

r0 = 0, 
r1 = machine type number discovered in (3) above. 
r2 = physical address of tagged list in system RAM, or 
    physical address of device tree block (dtb) in system RAM 

我相信有(或至少是)從固定位置加載ATAG的選項,而不是在r2中找到的地址。但是,ATAGs的使用現在已經被棄用和廢棄,新的平臺不應該使用它。

3

基本上ATAGs被用來向Linux內核發送關於板子的機器特定信息(如內存,控制檯信息等等)的信息,這些ATAG被linux內核用來初始化MMU和其他子系統。現在所有與機器有關的信息都可以通過FDT(設備樹blob)傳遞出來。但是隨着設備樹的出現(更多的是用於arm,因爲它已經在powerpc架構中使用了)。

有一些想法用於使用新的atag「atag_dtd」向內核發送設備樹信息,但隨後出現了針對不使用ATAG的爭論,因爲不需要使用兩個seprate方法來執行單個事情。所以現在內核希望引導程序提供以下信息。

r0 = 0 
r1 = Same type of SOC fdt machine id. 
r2 = physical address where the dtd can be found. 

它使用了bootloader用來發送atag信息的相同結構,所以它可以是後向字符兼容的。

希望它有幫助。