将 ISOLINUX 与 UEFI 结合使用的正确方法是什么?

将 ISOLINUX 与 UEFI 结合使用的正确方法是什么?

我一直在尝试在 64 位版本中添加 UEFI 支持最小的 Linux 直播很长一段时间,不幸的是没有取得多大成功。正如你从下图中看到的,我得到关键错误每次我尝试通过 UEFI 启动时。

最小的 Linux Live - UEFI

为了达到这一点,我所做的就是:

  1. 我下载了系统Linux-6.0.3
  2. 我按照说明进行操作这里并复制efi64/efi/syslinux.efi\EFI\BOOT\BOOTX64.EFI.
  3. 我也复制efi64/com32/elflink/ldlinux/ldlinux.e64\EFI\BOOT\LDLINUX.E64.
  4. 我创建了虚拟机虚拟盒子(版本 5.0.20)并启用 UEFI。
  5. 我生成了新的 ISO 映像(所有 ISOLINUX 配置文件都位于根文件夹中,请参见屏幕截图)并将其作为虚拟机中的主要可启动媒体。
  6. 启动后,我立即收到您在屏幕截图上看到的错误。
  7. 此时,我必须重命名\EFI\BOOT\BOOTX64.EFI为,\EFI\BOOT\BOOTX641.EFI以便“中断”引导过程并退回到 UEFI shell。
  8. 在 UEFI shell 中,我使用了该命令edit,然后导航到该\EFI\BOOT文件夹​​。
  9. 我手动调用BOOTX641.EFI,最终出现了您可以看到的相同错误。

因此,我可以得出结论,我的 EFI 存根正在执行,但在执行过程中出现了一些问题,此时我不知道出了什么问题。

我检查了 ISO 映像结构系统救援光盘我知道它支持 UEFI 并且我注意到以下几点:

  1. EFI 结构仅包含一个文件:\efi\boot\bootx64.efi.
  2. 大小为\efi\boot\bootx64.efi724KB,而 Syslinux 6.03 中的相应文件efi64/efi/syslinux.efi约为 200KB,因此这绝对不是同一个文件。
  3. 当我\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 月):

已经很长时间没有答案了,所以我以完全不同的方式实现了我的解决方案:

  • 我不使用SyslinuxUEFI 启动模式。
  • 我使用 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 特定的支持下,仅实现您能够测试的部分可能会更安全。

相关内容