UEFI模式下的内核初始化

UEFI模式下的内核初始化

当使用旧版 BIOS(考虑 X86 架构)时,引导加载程序会跳转到实模式内核的某个位置(偏移量 512,在 header.S 汇编文件中定义)并启动实模式代码。然后,实模式代码准备堆栈和堆,并在实模式下再次跳转到 main.c。 UEFI启动机制怎么样?还使用实模式内核代码吗?引导加载程序是否跳转到 header.S 的同一部分并在实模式下控制同一代码?更准确地说,引导加载程序跳转到操作系统代码时的内核初始化在传统 BIOS 引导和 UEFI 引导之间有何区别?

答案1

当使用EFI存根机制时,不使用实模式代码。固件(在机器启动时从主板上的闪存 ROM 执行)在加载内核映像之前将处理器切换到保护模式。内核映像头的构造看起来像 UEFI 规范所要求的 PE 可执行文件。欲了解更多信息,请参阅这篇英特尔文章

编辑:在下面的评论中添加了一些所需的信息。arch/x86/boot/header.S包含使文件在使用CONFIG_EFI_STUB.固件调用位于标头中的入口点;入口点efi_pe_entry位于arch/x86/boot/compressed/head_64.S.该例程调用make_boot_paramsefi_mainin arch/x86/boot/compressed/eboot.c。前者构造一个boot_params结构,如果在命令行上指定,还会加载 initramfs。内核命令行的处理方式也不同:UEFI 也会处理它,但由于 UEFI 使用 UCS-2 编码字符串(Unicode 的子集),因此它们会转换为 ASCII。两者都header.S包含head_64.S许多 EFI 存根和传统引导方式之间常见的代码。

诗。 UEFI 可能有一天能够永久摆脱 x86 处理器中的实模式。它仅用于引导现代操作系统。

相关内容