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 シェルに閉じ込められて起動できません。
最新の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。
- ダウンロード
OVMF-0.1+r14071-1.1.x86_64.rpm
または最新バージョン。 bios.bin
タチから抽出:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
- 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シェルからカーネルを起動できます。例:2。startup.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。
答え2
最新のUbuntu 20.04:
sudo qemu-system-x86_64 -enable-kvm -bios /usr/share/ovmf/OVMF.fd -hda myimage.raw
初期のUbuntuと他のLinuxの場合:
cd ~
git clone git://github.com/tianocore/edk2.git
cd edk2
git submodule init
git submodule update --depth=1
make -C BaseTools
. edksetup.sh
vi Conf/target.txt
ACTIVE_PLATFORM = MdeModulePkg/MdeModulePkg.dsc
TOOL_CHAIN_TAG = GCC5 # or GCC49 GCC48 ... check ./Conf/tools_def.txt
TARGET_ARCH = X64
build
vi Conf/target.txt
ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc
build
sudo qemu-system-x86_64 -enable-kvm -bios ./Build/OvmfX64/RELEASE_GCC5/FV/OVMF.fd -hda myimage.raw
説明は以下で修正されましたhttps://wiki.ubuntu.com/UEFI/OVMFそしてhttps://wiki.ubuntu.com/UEFI/EDK2出版当時、Ubuntu 20.04でテストされました。
答え3
直接の回答ではないけど、興味があるような回答がないのでこのxorrisoのバグレポート- そこにもコメントを残す予定ですが、簡単に言うとxorriso-1.2.4は次のようになります。アップストリームリビジョン1044私によく合い、私のハードウェアスタンドは完璧にフィットします。このスクリプト(これはロシア語で書かれたwikiですが、スクリプトの部分は十分に明確でなければなりません。注efiboot.img
)。
syslinuxからの/usr/lib/syslinux/isohdpfx.bin
最新の4.06には、EFI部門に関する変更があるようです。
これは別の井戸です(U)EFIに関する有用な知識、質問にスクリプトレットを提供していただきありがとうございます :)
答え4
qemu-system-x86_64 -kernel xxx.elf -serial /dev/stdout -monitor stdio