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


21

QEMU(kmv)を使用してEFI環境をエミュレートしようとしています。virtualbootは、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 KERNEL +シェル

同じ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シェルが表示されます。大丈夫ですか?initrd.lzとrootfs.gzは互換性がありますか?bzImageとvmlinuzはどうですか?

私は何が欠けていますか?

回答:


21

OVMFはr13683 -boot以降、およびr13923以降をサポートし-kernel -append -initrdています

  1. ダウンロード OVMF-0.1+r14071-1.1.x86_64.rpmまたは新しいバージョン。
  2. bios.binrpmから抽出します。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ファームウェアには、実行するバイナリのフォーマット要件もあるため、bistImageまたは任意のカーネルイメージをEFISTUBでビルドする必要があります。

パラメータを手動で指定して、EFIシェルからカーネルを起動できます。例:2startup.nshちょっとしたタイピングを省いて作成できます。ブートローダーを使用して、より完全な管理を行うことができます。これらを学ぶ必要があります:2

EFIファームウェアは、NVRAMにブートオプションを保存します。QEMUは現在NVRAMを保持していないため、QEMUを閉じるとブートオプションは失われます。ブートオプションがない場合、firmareは\EFI\BOOT\BOOTX64.EFI実行しようとしますが、ここにはないため、何をブートするかがわからず、制御はユーザーに委ねられます。EFIシェルでカーネルをブートするために必要なことは、ファイルシステムを入力し、適切なパスに移動して、バイナリを実行するだけです。

fs0:
    cd EFI\fedora
    grub.efi

または

vmlinuz.efi ...

EDK2以来のvirtio-SCSI OVMFサポートr13867


OVFMリンクが停止しています。
-jcoffland

@jcoffland本当に死んでいるわけではありません。ディレクトリは、古いリリースが削除されたフォルダーだけを参照できます。download.opensuse.org/repositories/home:/jejb1:/UEFIに移動し、元のリンクのパターンに一致する最新リリースを選択します
LiveWireBT

1
現代のUbuntuでは、あなたはできることがapt install ovmfありますkvm -bios OVMF.fd ...
トビア


1

直接的な答えではありませんが、このxorrisoバグレポートに興味があるものはないので、ここでもコメントしますが、要するに、アップストリームリビジョン1044の xorriso-1.2.4 は私にとってはうまく機能し、私のハードウェアはまさにこのスクリプト(ロシア語で話されているwikiですが、スクリプト部分は十分に読みやすいはずです;に注意してくださいefiboot.img)。

これ/usr/lib/syslinux/isohdpfx.binはsyslinuxからのものであり、最新の4.06にはEFI部門に関連する変更があるようです。

ここに(U)EFIに関する有用な知識の別のウェルがあり、質問のスクリプトレットもありがとう:)


1

使用してこのスクリプトをcdカーネルソースツリーと実行に:

runlinux -- -bios ~/path/to/OVMF.fd

https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.zip/downloadOVMF.fdから抽出された場所

このスクリプトは、BusyBoxを使用して最小限のファイルシステムを生成し、カーネルをコンパイルして、QEMUで次を実行します。

qemu-system-x86_64 -enable-kvm -kernel bzImage \
                   -initrd ../rootfs.gz -bios ~/path/to/OVMF.fd

この投稿で述べたように、 QEMUの内部からUEFIが使用されたことを確認できます。

ls /sys/firmware/efi

0
qemu-system-x86_64  -kernel xxx.elf -serial /dev/stdout -monitor stdio

4
こんにちは、サイトへようこそ。回答に詳細を追加してください。このコマンドは何ですか?どこで実行する必要がありますか?おそらくブートローダーの構成に追加する必要がありますか?どうやって?どこ?あなたがこれが何であるかを説明しない限り、私はそれが有用な答えではないことを恐れています。
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.