linux - ARM Linux : Why does the linux expect the register r0 to be set to zero

标签 linux arm

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/

相关文章:

c - ARM cortex如何处理PendSV Handler

linux - 如何使用命令删除FTP中的文件夹?

java - 在 windows/linux 上连接和断开网络连接

linux - webkit-gtk 编译错误

linux - 替换符合两个条件的行上的单词

assembly - ARM 汇编中的 "Change instruction set"- 这究竟是什么意思?

c++ - IAR EW for ARM 分析器

linux - openssl 必须使用什么加密?

linux - 使用 Linux 读取 ARMv8 中的 PMU 计数器

c - 关于为 arm 目标编译应用程序时使用的浮点 abi 标志