设备树和ATAG有什么区别?此外,ATAG是必须的,内核是否期望它们在固定地址,或者它是否期望它们在r0-r3中?
答案 0 :(得分:14)
设备树描述了内核用于选择要加载哪些驱动程序的硬件的所有内容,所有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中找到的地址的选项。但是,ATAG的使用现在已经过时并且已经过时,新平台不应该使用它。
答案 1 :(得分:5)
基本上ATAG用于向Linux内核发送有关机器特定信息的信息,如内存,控制台信息等。这些ATAG被linux内核用于初始化MMU和其他子系统。
但是随着设备树的出现(因为它已经在powerpc架构中使用,因此更多地使用它)。现在所有与机器相关的信息都可以使用FDT(设备树blob)传递。
有一些想法可以使用新的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信息的相同结构,因此它可以与后缀兼容。
希望它有所帮助。