QEMU(kvm)を使用してEFIカーネルを起動するには?

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 シェルに閉じ込められて起動できません。

QEMU + EFI + Linuxカーネル + シェル

最新のUbuntuバージョンを使用し、同じEFI環境を使用している場合

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シェルが表示されます。私はできますか? initrd.lzとrootfs.gzは互いに置き換えて使用できますか? bzImageとvmlinuzはどうですか?

私は何を見逃していますか?

ベストアンサー1

OVMFは-boot今後サポートしています。r13683-kernel -append -initrd自己支援r13923

  1. ダウンロード OVMF-0.1+r14071-1.1.x86_64.rpmまたは最新バージョン。
  2. bios.binタチから抽出:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
  3. QEMUのファームウェアパラメーターを指定します。 (qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.isoテストと生成にFedoraのboot.isoを使用します。特別措置)

また、qemu -kernel -append -initrdカーネル3.5、3.6、3.8でテストしました。


EFIファームウェアには、起動可能なISOイメージのフォーマットとファイル層の要件があります(1)などのディスク。修正されたISOイメージが要件を満たしていないため、ファームウェアはそれを認識しない可能性があります。 EFIファームウェアには実行するバイナリのフォーマット要件もあるため、bzImageまたはカーネルイメージをEFISTUBとしてビルドする必要があります。

手動で指定されたパラメータを使用してEFIシェルからカーネルを起動できます。例:2startup.nshタイピング時間を少し節約するために1つを作成できます。より完全な管理のためにブートローダを使用できます。あなたは以下を学ぶ必要があります:2

EFIファームウェアは起動オプションをNVRAMに保存します。 QEMU は現在 NVRAM を保持していないため、QEMU がシャットダウンすると起動オプションが失われます。ブートオプションがない場合、ファームウェアは\EFI\BOOT\BOOTX64.EFI実行を見つけようとしますが、ここにないので、何をブートする必要があるのか​​わからず、コントロールをユーザーに任せます。 EFIシェルでカーネルを起動するために必要なのは、ファイルシステムに入り、正しいパスに移動してバイナリを実行することだけです。

fs0:
    cd EFI\fedora
    grub.efi

または

vmlinuz.efi ...

OVMFはEDK2からvirtio-scsiをサポートしています。r13867

おすすめ記事