2020年11月17日 星期二

製作 UEFI 開機光碟 iso 映像檔

找了很久才找到製作 UEFI 開機光碟 iso 映像檔的方法。 Syslinux 官網的描述 看不太懂; 照著 這個 gist 做, 又參考 這個問答 線上版 xorriso 手冊 (電腦版的竟然不太完整?) 才終於理解。

用 xorriso 製作開機光碟時, 最簡單的就是採用 isolinux 所提供的標準開機機制 -- 這部分的設定跟 extlinux 差不多。 但其實你還可以用 "-eltorito-alt-boot -e boot/efi.img -no-emul-boot" 選項組指定額外的開機管理員。 這三個選項一定要連在一起。 其中 boot/efi.img 的路徑可以自選, 必須指向 (更深一層的) 一個磁碟片映像檔。 而且這樣的選項三人組可以不只一組, 也就是說 「額外開機管理員」 可以不只一個。 事實上 -b 選項相當於 -eltorito-boot 也就是第零組開機管理員的開頭選項。 電腦遇到多組開機管理員時會如何選擇? 還沒研究。

會需要用到這個磁碟片映像檔, 是因為 UEFI 不認得 iso9660 檔案系統, 只認得 fat 系列 (12/16/32) 的檔案系統。 我把兩組開機選單分別用不同方式標示, 完整的指令如下: xorriso -as mkisofs -o /somewhere/grml64-new.iso -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -eltorito-alt-boot -e boot/efi.img -no-emul-boot /iso-source/ 最後還需要 isohybrid --uefi /x/cdrom/grml64-new.iso 然後就可以 kvm -pflash /usr/share/qemu/OVMF.fd -cdrom ... 測試

讀者可以下載 原版的 grml linux貴哥實驗室客製版 (grml64-small-g20?.iso) 來研究。 我的關鍵檔案 boot/efi.img 就直接從原版的拷過來, 完全沒有 (ㄅㄨˊ ㄏㄨㄟˋ ) 修改。 你可以用 mount -o ro boot/efi.img /mnt/test 之類的把它掛載起來查看, 裡面就只有一個執行檔 EFI/BOOT/bootx64.efi 。 用 kvm 的 OVMF 模式測試 UEFI 開機時所看到的選單只有文字模式, 而且內容跟 「未模擬 UEFI 的普通模式」 所看到的選單並不一樣。 注意到它的訊息寫說 「按 C 進入 grub 命令列」, 這是用 grub 製作的, 不是用 isolinux 製作的。 開完機之後, 用 cat /proc/cmdline 查看, 也會發現兩者的開機命令列不一樣。 Grub 好囉嗦, 我只會用偷吃步使用, 算了, 以後再研究。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。