设备树和 ATAG 之间有什么区别?另外,ATAG 是必须的吗?内核是否期望它们位于固定地址,还是期望它们位于 r0-r3 中?
设备树描述了有关硬件的所有信息,内核在运行时使用这些硬件来选择要加载的驱动程序、所有 MMIO 接口的位置等。 ATAG 只是描述诸如在哪里可以找到 initrd 和内核参数、内存等内容……有关机器的其他所有内容都被硬编码到内核中。
现在首选的方法是使用设备树而不是 ATAG。优点之一包括添加新平台并不总是需要向内核添加新代码。
要回答你的第二个问题,如果你已经阅读了文档在 ARM 平台上启动 Linux,您会发现内核期望在将控制权移交给内核之前将以下内容放入寄存器中:
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
我相信有(或者至少是)有一个选项可以从固定位置而不是 r2 中找到的地址加载 ATAG。然而,ATAG 的使用现已被弃用和过时,新平台不应使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)