我有一台带有 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
,我可以启动我的程序,但无法使用键盘与其交互。知道为什么吗!?
编辑:找到了关于linuxefi
andinitrdefi
但由于找不到该文件,我进入命令行,使用 ls 找到我的硬盘,然后使用linuxefi (hd0,pt2)/mlinuz64.efi
,但它没有做任何事情。
答案1
对于任何遇到空白屏幕的人来说,问题是我需要启用 FRAMEBUFFER:
CONFIG_FB_EFI=y
CONFIG_FRAMEBUFFER_CONSOLE=y
事实证明,CONFIG_EFI_STUB
如果您使用 grub 而不是直接启动,您也可以禁用它。