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シェルにドロップしました。
同じ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はどうですか?
何が欠けていますか?
OVMFは r1368 以降の-boot
をサポートし、 r1392 以降の-kernel -append -initrd
をサポートしています。
OVMF-0.1+r14071-1.1.x86_64.rpm
以降のバージョン。bios.bin
を抽出します:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.iso
( 特別な対策 で作成されたFedoraのboot.isoでテスト)また、カーネル3.5、3.6、および3.8でqemu -kernel -append -initrd
をテストしました。
EFIファームウェアには、ISOイメージをブート可能( 1 )にするためのフォーマットとファイル階層の要件、およびディスクのその他の要件があります。変更されたISOイメージはおそらく要件を満たしていないため、ファームウェアはそれを認識しませんでした。 EFIファームウェアには、バイナリを実行するためのフォーマット要件もあります。そのため、bzImageまたはEFISTUBを使用して構築する必要のあるカーネルイメージを作成します。
パラメータを手動で指定して、EFI Shellからカーネルを起動できます。例: 2 。 startup.nsh
を作成して、少しタイプする手間を省くことができます。ブートローダーを使用して、より完全な管理を行うことができます。これらを学ぶ必要があります: 2
EFIファームウェアは、ブートオプションをNVRAMに保存します。 QEMUは現在NVRAMを保持しないため、QEMUを閉じると起動オプションは失われます。起動オプションがない場合、ファームウェアは実行する\EFI\BOOT\BOOTX64.EFI
を見つけようとしますが、ここにはないため、何を起動するかわからず、制御はユーザーに委ねられます。 EFI Shellでカーネルを起動するために必要なことは、ファイルシステムに入り、適切なパスに移動し、バイナリを実行することだけです。
fs0:
cd EFI\Fedora
grub.efi
または
vmlinuz.efi ...
EDK2以降のOVMFはvirtio-scsiをサポートしています r13867 。
直接的な回答ではありませんが、興味のあるものはないため、 this xorriso bugreport -私もそこでコメントしますが、簡単に言えば、xorriso-1.2.4に pstreamリビジョン1044 私と私のハードウェアスタンドで問題なく動作します このスクリプト (ロシア語のwikiですが、スクリプトの部分は十分に読みやすいはずです。efiboot.img
に注意してください)。
/usr/lib/syslinux/isohdpfx.bin
はsyslinuxからのものであり、最新の4.06ではEFI部門に関連する変更があるようです。
(U)EFIに関する有用な知識 の別のウェルがあります。質問のスクリプトレットにも感謝します:)
このスクリプト 、cd
をカーネルソースツリーに使用して実行します。
runlinux -- -bios ~/path/to/OVMF.fd
どこ OVMF.fd
は https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.Zip/download から抽出されました
このスクリプトは、BusyBoxを使用して最小限のファイルシステムを生成し、カーネルをコンパイルして、次のコマンドでQEMUで実行します。
qemu-system-x86_64 -enable-kvm -kernel bzImage \
-initrd ../rootfs.gz -bios ~/path/to/OVMF.fd
これで、QEMU内からUEFIが使用されたことを確認できます この投稿で述べたように :
ls /sys/firmware/efi
qemu-system-x86_64 -kernel xxx.elf -serial /dev/stdout -monitor stdio