使用 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 還有 GRUBgrub.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 設備。

相關內容