it-swarm-eu.dev

Jak zavést jádro EFI pomocí QEMU (kvm)?

Snažím se emulovat prostředí EFI pomocí QEMU (kmv); spuštění virtuálního boxu v režimu EFI pomocí archbootu trvá 15 minut.

Pomocí staršího režimu BIOS mohu zavést systém pomocí tohoto příkazu:

[email protected]:/home/maiko/uefi/ovmf# qemu-system-x86_64 -kernel  ../bzImage -initrd ../rootfs.gz -append "rw root=/dev/ram0  ramdisk_size=40960"

a funguje to s mým vlastním jádrem a souborovým systémem.

file ../bzImage 
../bzImage: Linux kernel x86 boot executable bzImage, version 3.6.1 ([email protected]) #4 , RO-rootFS, swap_dev 0x3, Normal VGA

má také podporu EFI.

Snažím se udělat totéž se soubory EFI, které jsem stáhl odtud

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
[email protected]:/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"

A já jsem spadl do EFI Shell, neumožňuji bootovat.

QEMU + EFI + LINUX KERNEL + Shell

Pokud používám nejnovější verzi Ubuntu pomocí stejného prostředí EFI

[email protected]:/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"

... spouštěcí proces funguje dobře.

enter image description here

Snažil jsem se nahradit spouštěcí soubory Ubuntu mým, ale možná úplně nerozumím jeho funkčnosti. Když po připojení ISO jednoduše nahradím soubory:

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 

objeví se stejné prostředí EFI. Je to v pořádku? initrd.lz a rootfs.gz jsou zaměnitelné, že? A co bzImage a vmlinuz?

Co mi chybí?

22
MaikoID

OVMF podporuje -boot Od r1368 a podporuje -kernel -append -initrd Od r1392 .

  1. StáhnoutOVMF-0.1+r14071-1.1.x86_64.rpm Nebo novější verze.
  2. Extrahujte bios.bin Z otáček: rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
  3. Zadejte parametr firmwaru pro QEMU: qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.iso (Testováno s boot.iso Fedory vytvořené pomocí speciální opatření )

Testoval jsem také qemu -kernel -append -initrd S jádrem 3.5, 3.6 a 3.8.


Firmware EFI má požadavky na formát a hierarchii souborů, aby byl obraz ISO spouštěcí ( 1 ) a další pro disky. Upravený obraz ISO pravděpodobně nesplnil požadavky, takže jej firmware nerozpoznal. Firmware EFI má také požadavky na formát, aby se binární spustil, takže váš bzImage nebo jakýkoli obraz jádra musí být vytvořen pomocí EFISTUBu.

Můžete zavést jádro z EFI Shell s parametry zadanými ručně. Příklady: 2 . Můžete vytvořit startup.nsh Pro uložení trochu psaní. Zavaděče můžete použít k úplnější správě. Musíte se naučit tyto: 2

Firmware EFI ukládá možnosti spuštění v NVRAM. QEMU aktuálně nezachovává NVRAM, takže možnosti zavádění se ztratí, jakmile QEMU zavřete. Bez možností spouštění se firmare snaží najít \EFI\BOOT\BOOTX64.EFI, Který se má provést, ale není to tady, takže neví, co má zavádět, a ponechává vám kontrolu. Co potřebujete udělat pro zavedení jádra v EFI Shell je prostě zadat souborový systém, přejít na správnou cestu a spustit binární.

fs0:
    cd EFI\Fedora
    grub.efi

nebo

vmlinuz.efi ...

OVMF podporuje virtio-scsi od EDK2 r13867 .

24
Lingzhu Xiang

Ne přímá odpověď, ale protože neexistují žádné, které by vás mohly zajímat tento xorriso bugreport - Budu tam také komentovat, ale zkrátka, xorriso-1.2.4 s proti proudu) revize 1044 funguje mi dobře a můj hardware stojí přesně tento skript (jedná se o ruskou mluvenou wiki, ale skriptová část by měla být dostatečně čitelná; věnujte pozornost efiboot.img).

Všimněte si, že /usr/lib/syslinux/isohdpfx.bin pochází ze syslinux a zdá se, že poslední 4.06 má relevantní změny v oddělení EFI.

Zde je další studna žitečné znalosti o (U) EFI , a děkuji také za skriptlet v otázce :)

1
Michael Shigorin

Pomocí tento skript , cd do zdrojového stromu jádra a spusťte:

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

kde OVMF.fd bylo extrahováno z https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.Zip/download

Skript vygeneruje minimální souborový systém s BusyBoxem, zkompiluje jádro a spustí ho v QEMU s:

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

Nyní můžeme ověřit, že UEFI bylo použito uvnitř QEMU jak je uvedeno v tomto příspěvk :

ls /sys/firmware/efi
qemu-system-x86_64  -kernel xxx.elf -serial /dev/stdout -monitor stdio
0
leesagacious