找了很久才找到製作 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 好囉嗦,
我只會用偷吃步使用, 算了, 以後再研究。
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。