如何使用 QEMU (kvm) 啟動 EFI 核心?
我正在嘗試使用 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,無法啟動。
如果我使用相同 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
-boot
從r13683-kernel -append -initrd
開始支持,從r13923開始支持。
- 下載
OVMF-0.1+r14071-1.1.x86_64.rpm
或更新版本。bios.bin
從 rpm 中提取:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
- 為 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
以節省一點打字。您可以使用引導載入程序進行更完整的管理。你需要學習這些:2EFI 韌體將引導選項保存在 NVRAM 中。QEMU 目前不保留 NVRAM,因此一旦關閉 QEMU,啟動選項就會失去。如果沒有啟動選項,firmare 會嘗試查找
\EFI\BOOT\BOOTX64.EFI
執行但它不在這裡,因此它不知道要啟動什麼並將控制權留給您。在 EFI shell 中啟動核心所需要做的就是進入一個文件系統,導航到正確的路徑,然後執行一個二進製文件。fs0: cd EFI\fedora grub.efi
或者
vmlinuz.efi ...
自 EDK2 r13867起,OVMF 支持 virtio-scsi 。