在 x86 上引导 Linux 与在 ARM 上引导 Linux 有何不同

Posted

技术标签:

【中文标题】在 x86 上引导 Linux 与在 ARM 上引导 Linux 有何不同【英文标题】:How booting Linux on x86 is different from booting Linux on ARM 【发布时间】: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 启动过程的见解?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢@Chris,所以它与x86架构的奇怪地址空间无关,空间分散在各处?另外我猜你指的是实模式代码中的I / O端口初始化然后配置设备和内存控制器。 根据我的经验,问题更多是有限的内存量,是的,设置全局和中断描述符表是切换到保护模式的一部分。

以上是关于在 x86 上引导 Linux 与在 ARM 上引导 Linux 有何不同的主要内容,如果未能解决你的问题,请参考以下文章

x86的PC机上运行ARM架构开发板

x86机器上运行arm64 docker

x86机器上运行arm64 docker

linux查询静态库是arm平台还是x86平台

Linux系统下x86和ARM的区别有哪些?

arm搭建x86运行时