我一直在尝试在 64 位版本中添加 UEFI 支持最小的 Linux 直播很长一段时间,不幸的是没有取得多大成功。正如你从下图中看到的,我得到关键错误每次我尝试通过 UEFI 启动时。
为了达到这一点,我所做的就是:
- 我下载了系统Linux-6.0.3。
- 我按照说明进行操作这里并复制
efi64/efi/syslinux.efi
到\EFI\BOOT\BOOTX64.EFI
. - 我也复制
efi64/com32/elflink/ldlinux/ldlinux.e64
到\EFI\BOOT\LDLINUX.E64
. - 我创建了虚拟机虚拟盒子(版本 5.0.20)并启用 UEFI。
- 我生成了新的 ISO 映像(所有 ISOLINUX 配置文件都位于根文件夹中,请参见屏幕截图)并将其作为虚拟机中的主要可启动媒体。
- 启动后,我立即收到您在屏幕截图上看到的错误。
- 此时,我必须重命名
\EFI\BOOT\BOOTX64.EFI
为,\EFI\BOOT\BOOTX641.EFI
以便“中断”引导过程并退回到 UEFI shell。 - 在 UEFI shell 中,我使用了该命令
edit
,然后导航到该\EFI\BOOT
文件夹。 - 我手动调用
BOOTX641.EFI
,最终出现了您可以看到的相同错误。
因此,我可以得出结论,我的 EFI 存根正在执行,但在执行过程中出现了一些问题,此时我不知道出了什么问题。
我检查了 ISO 映像结构系统救援光盘我知道它支持 UEFI 并且我注意到以下几点:
- EFI 结构仅包含一个文件:
\efi\boot\bootx64.efi
. - 大小为
\efi\boot\bootx64.efi
724KB,而 Syslinux 6.03 中的相应文件efi64/efi/syslinux.efi
约为 200KB,因此这绝对不是同一个文件。 - 当我
\efi\boot\bootx64.efi
从“System Rescue CD”复制并在“Minimal Linux Live”的 EFI 结构中使用它时,UEFI 启动过程非常顺利,我可以看到 GRUB 2 shell。
这就是我如何发现\efi\boot\bootx64.efi
“System Rescue CD”中的文件具有内置 GRUB 2 支持,因此它一定是一个自定义构建的解决方案。
所以,用几句话就可以解决这个问题 - 我正在使用普通的 Syslinux 软件包,并且我想创建 UEFI 兼容的配置来启动一个简单的 ISO 映像。遵循官方说明似乎对我不起作用。
所有建议都受到高度赞赏!谢谢你!
注1:ISO 映像在 BIOS 模式下可以正常启动。那里没有问题。
笔记2:这很可能不是 VirtualBox 中的错误,因为其他操作系统(例如 Ubuntu 和 Linux Mint)在 UEFI 模式下启动得很好。
编辑 1 -(2017 年 1 月):
已经很长时间没有答案了,所以我以完全不同的方式实现了我的解决方案:
- 我不使用
Syslinux
UEFI 启动模式。 - 我使用 EFI 存根编译了 Linux 内核。
- 我创建了简单的
startup.nsh
脚本,该脚本在 UEFI 启动后自动执行。 - 相同的脚本加载内核和 initramfs。
这样我就失去了一些引导功能,例如,vga=ask
它在 UEFI 模式下工作正常,Syslinux
但在 UEFI 模式下不起作用,因为这个特定的引导选项需要正确的 Linux 引导加载程序。
尽管我有一个运行良好的解决方案,但问题仍然悬而未决。
编辑 2 -(2017 年 12 月):
这是对之前更新的补充。startup.nsh
仅当 UEFI 系统具有“UEFI Shell”(根据 UEFI 规范,固件可能会或可能不会提供 shell)并且仅当该 shell 具有 1 级或更高级别的支持时,该解决方案才有效。此外,无法保证启动脚本将被执行,因为在 ISO 映像中提供 ESP 的正确方法是通过“El Torito”启动映像。直接在 ISO 映像上提供 ESP 兼容结构似乎在某些固件上运行良好,但它不是通用解决方案。
问题仍然悬而未决,但同时我设法整合系统引导我不再认为这个问题是重中之重。
答案1
听起来更像是 System Rescue CD 使用 GRUB,而不是 syslinux。我的 grub64.efi 大约为 1MB,但我想您可以使用更少的模块来构建它。
您复制的映像名为 syslinux.efi,因此我不会将其称为 isolinux。我希望它寻找一个名为 的文件syslinux.cfg
,而不是isolinux.cfg
. (isolinux 会回退到syslinux.cfg
)。
我还注意到你说“所有 ISOLINUX 配置文件都在根文件夹中”。我不知道你是如何创建 ISO 的。请记住,引导加载程序需要位于特殊启动映像,而不是挂载 iso9660 文件系统时看到的目录树。显然 VirtualBox 正在启动一些东西,所以这不是这里的问题,但如果它比其他系统更宽松,那么你可能仍然在做“错误”的事情。
由“几个流行的 Linux 发行版”设置的混合启动映像读起来非常有趣,但我上次读到的内容不太可能有一个单一映像支持所有 Mac、32 位 EFI...至少固件可以看到多个启动映像并要求用户在“1”和“2”之间进行选择。在任何人尝试进入兔子洞之前请注意,至少在 Mac 特定的支持下,仅实现您能够测试的部分可能会更安全。