使用 mkisofs 和 -eltorito-boot efiboot.img 制作 UEFI 可启动映像

使用 mkisofs 和 -eltorito-boot efiboot.img 制作 UEFI 可启动映像

我正在尝试将当前通过 BIOS 启动的现有自定义 USB ISO 安装程序映像转换为通过 UEFI 启动的映像。我使用mkisofsisohybrid来制作 ISO,并通过 ISOLINUX 启动。我知道我应该使用-eltorito-alt-boot -eltorito-platform 0xEF -eltorito-boot isolinux/efiboot.img选项来启用 UEFI 启动,但我在 Google 上找不到任何页面告诉我在哪里获取难以捉摸的efiboot.img源文件。每个人都提到它,但每个人都假设您已经拥有它。这是如何构建或获得的?该man页面mkisofs没有任何帮助。我必须使用吗xorriso

仅供参考,我尝试通过 libvirt/kvm/qemu/virt-manager 启动它,但最终它必须在真实硬件上启动。开发环境是openSUSE Leap 42.1。无需支持 BIOS 或多平台。我不想修改太多现有的构建代码,但至少有一条评论 (@mikeserv) 表明 ISO 是完全错误的机制(这意味着这是一种严重的黑客行为,完全没有必要)。但这将涉及彻底修改构建,这将花费大量时间。

我们将不胜感激地收到有关此主题的教程或其他编写良好的页面的链接。我已经浏览了 Syslinux 网站和 Rod Smith 的页面,并且在查看其他所有内容时已经筋疲力尽。

答案1

我必须使用 xorriso 吗?

不必要。您需要一个 ISO 制作者,可以将 EFI 系统分区标记为 El Torito 启动映像。mkisofs可能会使用你提到的选项。isohybrid --uefi之后可以应用它以使其可从类似硬盘的设备启动。 (可能还需要有一个 ISOLINUX BIOS 启动映像,这样才isohybrid 可以工作。)

主要问题是您需要一个 EFI 系统分区文件,该文件必须是一个 FAT 文件系统映像,其中包含启动操作系统文件所需的程序,这些文件要么位于 FAT 映像中,要么位于封闭的 ISO 9660 文件系统中。

SYSLINUX EFI 软件不从光盘介质启动。因此,大多数项目都使用 GRUB 2(不是 GRUB 旧版)来实现此目的,并将其与 ISOLINUX BIOS 软件结合起来。 Debian netinst amd64 ISO例如,有一个小的 FAT 映像,其中有足够的 GRUB 大脑来跳转到 ISO 中的 GRUB 配置。中的那个openSUSE NET-x86_64 ISO更大。

要检查 Debian 的 EFI 设备,请将其安装为 ISO,然后将其文件安装/boot/grub/efi.img为 FAT。在里面你会发现一个文件 /efi/boot/bootx64.efi,程序检查后strings发现它包含嵌入式 GRUB 配置

search --file --set=root /.disk/info
set prefix=($root)/boot/grub
source $prefix/x86_64-efi/grub.cfg
(memdisk)/boot/grub

据我所知,FAT映像文件是由GRUB程序创建的 mkimage。该文件/.disk/info被认为仅存在于 Debian ISO 中,因此search可以使用它来查找 ISO 文件系统。

在 SuSE ISO 中,FAT 映像名为/boot/x86_64/efi.它比 Debian 包含更多的东西。除了 EFI 引导文件之外,bootx64.efi 还有一个grub.cfg超出我 GRUB 知识范围的文件。

如果您从头开始开发可启动 ISO,那么请考虑通过 GRUB 程序来生成您的 ISO grub-mkrescue。 (那是你真正需要的时候 xorriso,我是开发者。)

在 Debian 上,必须为 BIOS 和x86_64 EFI安装软件包grub-pc、 、 。在目录树中准备您的有效负载并运行grub-efi-ia32-bingrub-efi-amd64-bin

grub-mkrescue -o output.iso my_prepared_dir

我认为 SuSE 提供了与 Debian 类似的 GRUB 软件包,它配置为grub-mkrescue运行以生成 BIOS 和/或 EFI 设备。

相关内容