我有一个基于 Ubuntu 16.04 的自定义 iso,设计用于在 USB 上运行,该 USB 可以在传统 (CSM) 和 EFI(支持 CSM)模式下正常启动。在支持 CSM 的 EFI 模式下启动时,它使用 isolinux.cfg 中定义的菜单,而不是 grub.cfg 中定义的菜单,这是我所期望的。如果没有 CSM 支持,它根本无法在 EFI 模式下启动。
我挂载了自定义 iso 的 efi 分区,它只包含 bootx64.efi 作为文本文件,没有 grubx64.efi。当我从 Ubuntu 16.04 的 iso 挂载 efi 分区时,它同时包含 bootx64.efi 和 grubx64.efi 作为程序。我很确定我搞砸了 grub-mkimage 的格式,希望能得到一些帮助。挂载 iso 后,我修改它的方法是:
BOOT_IMG_DATA="$PWD"
BOOT_IMG=efi.img
mkdir -p $(dirname $BOOT_IMG)
truncate -s 4M $BOOT_IMG
mkfs.vfat $BOOT_IMG
mkdir -p $BOOT_IMG_DATA/EFI/BOOT
grub-mkimage \
-C xz \
-d "$HOME"/foxbuild2/src/livecd/image/boot/grub/x86_64-efi \
-O x86_64-efi \
-o $BOOT_IMG_DATA/EFI/BOOT/bootx64.efi \
boot linux search normal configfile \
part_gpt btrfs fat iso9660 loopback \
test keystatus gfxmenu regexp probe \
efi_gop efi_uga all_video gfxterm font \
echo read ls cat png jpeg halt reboot
mcopy -i $BOOT_IMG -s $BOOT_IMG_DATA/EFI ::
# 创建新的 ISO 映像
# The example names get mapped to their roles here
#orig_iso=../foxclone.iso
new_iso=../foxclone025-4.15UEFI.iso
new_files="$PWD"
mbr_template=/usr/lib/ISOLINUX/isohdpfx.bin
xorriso -as mkisofs "$new_files" \
-o "$new_iso" \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot \
-e isolinux/efi.img \
-no-emul-boot \
-isohybrid-gpt-basdat \
-m grub.cfg
提前致谢,拉里