Ubuntu

如何使用 QEMU (kvm) 啟動 EFI 核心?

  • January 14, 2021

我正在嘗試使用 QEMU (kmv) 模擬 EFI 環境;virtualbox 使用 archboot 在 EFI 模式下啟動需要 15 分鐘。

使用傳統 BIOS 模式,我可以使用以下命令啟動:

root@citsnmaiko-deb:/home/maiko/uefi/ovmf# qemu-system-x86_64 -kernel  ../bzImage -initrd ../rootfs.gz -append "rw root=/dev/ram0  ramdisk_size=40960"

它適用於我的自定義核心和文件系統。

file ../bzImage 
../bzImage: Linux kernel x86 boot executable bzImage, version 3.6.1 (root@citsnmaiko-deb) #4 , RO-rootFS, swap_dev 0x3, Normal VGA

它也有 EFI 支持。

我正在嘗試對從此處下載的 EFI 文件執行相同操作

wget http://ufpr.dl.sourceforge.net/project/edk2/OVMF/OVMF-X64-r11337-alpha.zip -P ovmf
cd ovmf/
unzip -x OVMF-X64-r11337-alpha.zip
# rename the files for QEMU find them
mv OVMF.fd bios.bin
mv CirrusLogic5446.rom vgabios-cirrus.bin
# start QEMU
root@citsnmaiko-deb:/home/maiko/uefi/ovmf# qemu-system-x86_64 -L .  -kernel  ../bzImage -initrd ../rootfs.gz -append "rw root=/dev/ram0  ramdisk_size=40960" 
Could not open option rom 'linuxboot.bin': No such file or directory
pci_add_option_rom: failed to find romfile "pxe-e1000.bin"

而且我掉進了 EFI shell,無法啟動。

QEMU + EFI + LINUX 核心 + SHELL

如果我使用相同 EFI 環境的最新 Ubuntu 版本

root@citsnmaiko-deb:/home/maiko/uefi/ovmf# qemu-system-x86_64 -L . -boot d -cdrom ../ubuntu-12.10-desktop-amd64.iso
pci_add_option_rom: failed to find romfile "pxe-e1000.bin"

…啟動過程正常。

在此處輸入圖像描述

我試圖用我的替換 Ubuntu 引導文件,但也許我並不完全理解它的功能。當我在安裝 ISO 後替換文件時:

mkdir tmp
bsdtar xf ubuntu-12.10-desktop-amd64.iso -C tmp
cp bzImage tmp/casper/vmlinuz
cp rootfs.gz tmp/casper/initrd.lz 
genisoimage -o customUbuntu.iso tmp/
qemu-system-x86_64 -L . -boot d -cdrom customUbuntu.iso 

出現相同的 EFI Shell。可以嗎?initrd.lz 和 rootfs.gz 可以互換嗎?bzImage 和 vmlinuz 怎麼樣?

我錯過了什麼?

OVMF-bootr13683-kernel -append -initrd開始支持,從r13923開始支持。

  1. 下載 OVMF-0.1+r14071-1.1.x86_64.rpm或更新版本。
  2. bios.bin從 rpm 中提取:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
  3. 為 QEMU 指定韌體參數:(使用 Fedora 使用特殊措施qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.iso創建的 boot.iso 進行測試)

我還qemu -kernel -append -initrd使用核心 3.5、3.6 和 3.8 進行了測試。


EFI 韌體對 ISO 映像可引導 ( 1 ) 和其他磁碟具有格式和文件層次結構要求。您修改後的 ISO 映像可能不符合要求,因此韌體無法辨識它。EFI 韌體還具有執行二進製文件的格式要求,因此您的 bzImage 或任何核心映像都需要使用 EFISTUB 建構。

您可以使用手動指定的參數從 EFI shell 引導核心。例子:2。您可以創建一個startup.nsh以節省一點打字。您可以使用引導載入程序進行更完整的管理。你需要學習這些:2

EFI 韌體將引導選項保存在 NVRAM 中。QEMU 目前不保留 NVRAM,因此一旦關閉 QEMU,啟動選項就會失去。如果沒有啟動選項,firmare 會嘗試查找\EFI\BOOT\BOOTX64.EFI執行但它不在這裡,因此它不知道要啟動什麼並將控制權留給您。在 EFI shell 中啟動核心所需要做的就是進入一個文件系統,導航到正確的路徑,然後執行一個二進製文件。

fs0:
   cd EFI\fedora
   grub.efi

或者

vmlinuz.efi ...

自 EDK2 r13867起,OVMF 支持 virtio-scsi 。

引用自:https://unix.stackexchange.com/questions/52996