如何在 UEFI 中运行自定义内核和 initrd?

如何在 UEFI 中运行自定义内核和 initrd?

我有一台带有 BIOS 的开发机器,在编译内核和 initrd 后,我可以通过简单的操作来使用它menuentry

menuentry "mlinux" {
       linux /boot/mlinuz quiet
       initrd /boot/minitramfs
}

然而,在另一台具有 UEFI 的计算机上运行此程序失败,我得到:

error: kernel doesn't support EFI handover.
error: you need to load the kernel first.

我想这可能与我的内核中缺乏对 UEFI 的支持有关,所以我重新编译了它并提供EFI_STUB支持(也必须启用ACPI)。现在我得到一个黑屏。如果我echo在每个步骤之前添加并删除quiet,我会看到echo消息,但仅此而已,没有内核消息,什么也没有。

看到这个之后问题和这个邮政,我将内核复制到:

  • /boot/efi/mlinuz.efi
  • /boot/efi/EFI/mlinuz.efi
  • /boot/efi/EFI/BOOT/mlinuz.efi

并使用这些地址作为我的路径menuentry,但仍然没有一个工作说找不到文件。我应该在哪里复制该文件以及我的 中应该包含什么内容menuentry

附带问题:如果我使用自己的 Linux 内核启动,但使用自定义内核initrd,我可以启动我的程序,但无法使用键盘与其交互。知道为什么吗!?

编辑:找到了关于linuxefiandinitrdefi但由于找不到该文件,我进入命令行,使用 ls 找到我的硬盘,然后使用linuxefi (hd0,pt2)/mlinuz64.efi,但它没有做任何事情。

答案1

对于任何遇到空白屏幕的人来说,问题是我需要启用 FRAMEBUFFER:

CONFIG_FB_EFI=y
CONFIG_FRAMEBUFFER_CONSOLE=y

事实证明,CONFIG_EFI_STUB如果您使用 grub 而不是直接启动,您也可以禁用它。

相关内容