我一直在对 ppc64le Linux 进行一些研究,但不清楚 POWER CPU 如何设置为小端。据我了解,机器和 CPU 状态默认在固件中以大端方式运行。但是启动内核时是什么负责切换到预期的字节序呢?
在不深入讨论细节的情况下,在 POWER/PPC 上启动内核将总结如下:
- 固件在机器重置时执行并重置机器状态。
- 固件加载引导加载程序并传递控制权。
- 引导加载程序加载内核并启动它。
我在网上搜索过,没有找到答案。我研究了引导加载程序代码,例如 grub、qemu-vof 和 slof,尽管有很多东西需要筛选,但还不清楚。我查看了 Linux 启动代码,可以看到它有时会读取 MSR_LE 状态,但我看不到它在启动时设置它。
那么,什么负责设置字节序呢?引导加载程序还是内核?或者甚至是其他什么?
我的答案是引导加载程序,因为它负责加载 ELF 映像并以预期的字节序启动它。但到目前为止,我还没有找到任何 ASM 来源,在启动进入点时可以明确这一点。我很乐意找出负责设置字节序的内容以及详细说明其如何完成的任何源列表。