ARM Linux 启动手册说寄存器 r0 应该为零。为什么寄存器r0应该是zer0?
http://www.arm.linux.org.uk/developer/booting.php
CPU register settings
r0 = 0.
r1 = machine type number discovered in (3) above.
r2 = physical address of tagged list in system RAM.
我浏览了 arch/arm/kernel/head.S 但找不到原因。
最佳答案
虽然我在 Linux 内核邮件列表或 Linux 源中找不到任何引用资料来证实这一点,但我推测该值正被用作 ABI 版本,以确保 ABI 面向 future 。
future 版本的内核可能希望修改从引导加载程序传入的参数:也许某些新的 CPU 功能需要一个新参数,或者需要稍微调整现有参数之一。
当从旧的引导加载程序引导新内核时,这会带来一个严重的问题:内核如何知道传入的参数是什么?我们可以尝试强制新内核只能使用新的引导加载程序来引导,但这会在过渡期间引起相当多的麻烦。 (引导加载程序是由 Linux 内核团队之外的人员编写的;并且经常深入硬件,从而在某些情况下阻止它们轻松升级。)
更好的解决方案是保留寄存器r0
作为ABI版本。目前,我们坚持 r0 始终为 0。如果 ABI 发生变化,r0 可以增加 1。 future 的内核可以检查 r0
以确定它正在启动的 ABI 版本,以及如何解释其他寄存器中的值。
关于linux - ARM Linux : Why does the linux expect the register r0 to be set to zero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7782229/