在 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 有何不同的主要内容,如果未能解决你的问题,请参考以下文章