我正在尝试了解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启动过程的见解?
答案 0 :(得分:1)
在x86上进行两步处理的原因是因为您提到的实模式切换。为了保持与“真正的”x86软件的向后兼容性,所有x86处理器最初都以实模式出现,实际上在这种模式下(可寻址存储器,寄存器大小等等),一切都非常有限。因此,最初使用的是最小负载,只需切换到保护模式,解决一些旧的黑客攻击(http://www.win.tue.nl/~aeb/linux/kbd/A20.html),然后加载适当的操作系统。
这种类型的东西并不妨碍Arm,因为它们比英特尔更早开始作为32位机器,因此手臂处理的遗留垃圾更少。