如何在x86上启动Linux与在ARM上启动Linux不同

时间:2014-03-27 14:08:25

标签: assembly linux-kernel x86 arm bootloader

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

我已经通过x86上的linux启动协议,发现内核分两步加载。

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

1)加载实模式内核代码,并为命令行参数分配。

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

是否因为x86 archtectiure的异常地址空间?

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

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

1 个答案:

答案 0 :(得分:1)

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

这种类型的东西并不妨碍Arm,因为它们比英特尔更早开始作为32位机器,因此手臂处理的遗留垃圾更少。