【问题标题】:How booting Linux on x86 is different from booting Linux on ARM在 x86 上引导 Linux 与在 ARM 上引导 Linux 有何不同
【发布时间】:2014-05-06 13:46:09
【问题描述】:

我正在尝试了解 x86 和 ARM 架构上的 linux 启动过程,并想知道在 x86 上启动 linux 和在 ARM 上启动 linux 之间的区别。

我在x86上浏览过linux引导协议,发现内核分两步加载。

https://www.kernel.org/doc/Documentation/x86/boot.txt

1) 加载带有命令行参数分配的实模式内核代码。

2) 加载保护模式(非真实)内核代码。

是不是因为 x86 架构的地址空间异常?

我在 ARM 端看不到这种行为,其中 linux Image 被作为一个整体加载到映射到连续位置的逻辑内核空间的 CPU 地址中。

谁能提供我在这两种架构上的 linux 启动过程的见解?

【问题讨论】:

    标签: assembly linux-kernel x86 arm bootloader


    【解决方案1】:

    x86 上的两步过程的原因是因为您提到的实模式切换。为了保持与“真正的”x86 软件的向后兼容性,所有 x86 处理器最初都是在实模式下出现的,实际上在这种模式下一切都非常有限(可寻址内存、寄存器大小等)。因此,最初使用最小负载,它只不过是切换到保护模式,解决一些旧的 hack (http://www.win.tue.nl/~aeb/linux/kbd/A20.html),然后加载适当的操作系统。

    Arm 并没有受到这类事情的阻碍,因为它们作为 32 位机器起步晚于英特尔,因此在 arm 上处理的遗留垃圾更少。

    【讨论】:

    • 谢谢@Chris,所以它与x86架构的奇怪地址空间无关,空间分散在各处?另外我猜你指的是实模式代码中的I / O端口初始化然后配置设备和内存控制器。
    • 根据我的经验,问题更多是有限的内存量,是的,设置全局和中断描述符表是切换到保护模式的一部分。
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 2013-11-21
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多