EFI çekirdeği QEMU (kvm) kullanılarak nasıl başlatılır?


21

QEMU (kmv) kullanarak bir EFI ortamını taklit etmeye çalışıyorum; sanal kutunun, archboot kullanılarak EFI modunda başlatılması 15 dakika sürer.

Eski BIOS modunu kullanarak bu komutu kullanarak önyükleyebilirim:

root@citsnmaiko-deb:/home/maiko/uefi/ovmf# qemu-system-x86_64 -kernel  ../bzImage -initrd ../rootfs.gz -append "rw root=/dev/ram0  ramdisk_size=40960"

ve benim özel çekirdek ve dosya sistemim ile çalışır.

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 desteği de var.

Buradan indirdiğim EFI dosyalarıyla aynı şeyi yapmaya çalışıyorum

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"

Ve ben bir EFI kabuğuna düşüyorum, önyüklemeyi etkinleştiremiyorum.

QEMU + EFI + LINUX KERNEL + KABUK

Aynı EFI ortamını kullanarak en son Ubuntu sürümünü kullanırsam

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"

... başlatma işlemi iyi çalışıyor.

görüntü tanımını buraya girin

Ubuntu önyükleme dosyalarını mayınla değiştirmeye çalıştım, ancak işlevselliğini tam olarak anlamadım. ISO'yu taktıktan sonra dosyaları yalnızca değiştirdiğimde:

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 

aynı EFI Kabuğu belirir. Tamam mı? initrd.lz ve rootfs.gz birbirlerinin yerine geçebilir mi? BzImage ve vmlinuz?

Neyi kaçırıyorum?

Yanıtlar:


21

OVMF destekler -bootberi r13683 ve destekleri -kernel -append -initrdberi r13923 .

  1. İndirin OVMF-0.1+r14071-1.1.x86_64.rpm veya daha yeni bir sürüm.
  2. Rpm'den ayıkla bios.bin:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
  3. QEMU için üretici yazılımı parametresini belirtin: qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.iso(Fedora'nın boot.iso'suyla özel önlemlerle oluşturulmuş olarak test edilmiştir )

Ayrıca qemu -kernel -append -initrdçekirdek 3.5, 3.6 ve 3.8 ile test ettim .


EFI bellenimi, ISO görüntüsünün önyüklenebilir olması için ( 1 ) ve diğerlerinin diskler için biçimlendirme ve dosya hiyerarşi gereksinimlerine sahiptir . Değiştirilmiş ISO görüntünüz büyük olasılıkla gereksinimleri karşılamadığı için ürün yazılımı tanımıyordu. EFI bellenimi, binaryin yürütülmesi için format gereksinimlerine sahiptir, bu nedenle bzImage veya hangi çekirdek görüntünün EFISTUB ile oluşturulması gerekir.

Çekirdeği manuel olarak belirtilen parametrelerle EFI kabuğundan önyükleyebilirsiniz. Örnekler: 2 . startup.nshBiraz yazarak tasarruf için bir oluşturabilirsiniz . Daha eksiksiz bir yönetim için önyükleyicileri kullanabilirsiniz. Bunları öğrenmeniz gerekir: 2

EFI bellenimi, NVRAM'da önyükleme seçeneklerini kaydeder. QEMU şu anda NVRAM'ı korumamaktadır, bu nedenle QEMU'yu kapattığınızda önyükleme seçenekleri kaybolur. Önyükleme seçenekleri olmadan, firma \EFI\BOOT\BOOTX64.EFIyürütmeyi bulmaya çalışır, ancak burada değil, bu yüzden ne önyükleyeceğinizi bilmiyor ve kontrolü size bırakıyor. Çekirdeği EFI kabuğuna yüklemek için yapmanız gereken şey sadece bir dosya sistemine girmek, doğru bir yola gitmek ve bir ikili dosyayı çalıştırmaktır.

fs0:
    cd EFI\fedora
    grub.efi

veya

vmlinuz.efi ...

OVMF, EDK2 r13867'den beri virtio-scsi'yi desteklemektedir .


OVFM bağlantısı öldü.
jcoffland

@jcoffland Gerçekten ölü değil, dizinler göz atılabilir sadece eski sürümleri kaldırılmış olan klasör kaldırıldı. Git download.opensuse.org/repositories/home:/jejb1:/UEFI ve bu özgün bağlantıdan kalıpla eşleşen bulabilirsiniz son sürümü seçin.
LiveWireBT

1
Modern Ubuntu'da hemen apt install ovmfve sonra yapabilirsinizkvm -bios OVMF.fd ...
Tobia


1

Doğrudan bir cevap değil ama bu kadar xorriso hata raporuyla ilginizi çekebilecek hiçbir şey olmadığı için - ben de orada yorum yapacağım ama kısacası, xorriso-1.2.4 yukarı yönde revizyon 1044 benim için iyi çalışıyor ve donanımım duruyor tam olarak bu senaryo (Rusça konuşulan bir wiki, ancak senaryo kısmı yeterince okunaklı olmalı; dikkat edin efiboot.img).

Not /usr/lib/syslinux/isohdpfx.binsyslinux gelen ve en son 4.06 EFI bölümünde ilgili değişiklikler var gibi görünüyor.

İşte (U) EFI hakkında bir başka yararlı bilgi ve soru yazarı için teşekkürler.


1

Kullanımı Bu komut dosyasını , cdbir çekirdek kaynak ağacı ve çalışma içine:

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

burada OVMF.fdekstrakte edilmiştir https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.zip/download

Betik, BusyBox ile minimal bir dosya sistemi oluşturur, çekirdeği derler ve QEMU'da şu şekilde çalıştırır:

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

Artık UEFI'nin bu yazıda belirtildiği gibi QEMU'nun içinden kullanıldığını doğrulayabiliriz :

ls /sys/firmware/efi

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

4
Merhaba ve siteye hoşgeldiniz. Lütfen cevabınıza biraz detay ekleyin. Bu komut nedir? Nerede çalıştırılmalı? Belki bootlaoder konfigürasyonuna eklenmeli mi? Nasıl? Nerede? Bunun ne olduğunu açıklamazsan, bunun faydalı bir cevap olmadığını düşünüyorum.
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.