从 UEFI 系统中的内核跳回 Grub



我正在开发一个符合multiboot2标准的小型x86 64位内核,内核由Grub加载和启动。要求是,一旦内核完成其活动,它就需要重新启动 Grub。在非基于 UEFI 的系统中,我们过去常常通过将处理器恢复到实模式跳转以解决0x7c00来实现这一点。

对于 UEFI 系统,我试图了解类似的事情是否可行,我认为一种可能的方法是使用 EFI 引导服务表中的EFI_IMAGE_LOAD和EFI_IMAGE_START例程从内核重新加载 Grub。我对 UEFI 内部的理解非常有限,如果有人可以确认这种方法是否有效,那将非常有帮助。

是的,假设你能找到 Grub 图像,这将起作用。(例如,如果 Grub 是通过网络加载的,则会更加困难。

您无需了解 UEFI 内部即可执行此操作。了解 UEFI 接口规范就足够了。

您不能从内核调用 ExitBootServices,因此您的操作系统可以执行的操作受到一定限制。 例如,您必须使用 UEFI 进行内存分配。 您必须维护虚拟地址空间到物理地址空间的 1 对 1 映射。 您使用多处理的能力可能会受到一定限制。 请参阅 UEFI 规范的第 2.3.4 节。

相关内容

  • 没有找到相关文章