Bagaimana cara mem-boot kernel EFI menggunakan QEMU (kvm)?


21

Saya mencoba meniru lingkungan EFI menggunakan QEMU (kmv); virtualbox membutuhkan waktu 15 menit untuk boot dalam mode EFI menggunakan archboot.

Menggunakan mode BIOS lama, saya bisa boot menggunakan perintah ini:

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

dan itu bekerja dengan kernel dan sistem file kustom saya.

file ../bzImage 
../bzImage: Linux kernel x86 boot executable bzImage, version 3.6.1 (root@citsnmaiko-deb) #4 , RO-rootFS, swap_dev 0x3, Normal VGA

ia memiliki dukungan EFI juga.

Saya mencoba melakukan hal yang sama dengan file EFI yang saya unduh dari sini

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"

Dan saya dijatuhkan di shell EFI, tidak memungkinkan untuk boot.

QEMU + EFI + LINUX KERNEL + SHELL

Jika saya menggunakan rilis Ubuntu terbaru menggunakan lingkungan EFI yang sama

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"

... proses booting berfungsi dengan baik.

masukkan deskripsi gambar di sini

Saya sudah mencoba mengganti file boot Ubuntu dengan milik saya tapi mungkin saya tidak sepenuhnya mengerti fungsinya. Ketika saya baru saja mengganti file setelah memasang 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 Shell yang sama muncul. Apakah itu oke? initrd.lz dan rootfs.gz dapat dipertukarkan bukan? Bagaimana dengan bzImage dan vmlinuz?

Apa yang saya lewatkan?

Jawaban:


21

OVMF mendukung -bootsejak r13683 , dan mendukung -kernel -append -initrdsejak r13923 .

  1. Unduh OVMF-0.1+r14071-1.1.x86_64.rpm atau versi yang lebih baru.
  2. Ekstrak bios.bindari rpm:rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
  3. Tentukan parameter firmware untuk QEMU: qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.iso(Diuji dengan boot.iso Fedora yang dibuat dengan tindakan khusus )

Saya juga diuji qemu -kernel -append -initrddengan kernel 3.5, 3.6, dan 3.8.


Firmware EFI memiliki persyaratan format dan hirarki file agar image ISO dapat di-boot ( 1 ), dan lainnya untuk disk. Gambar ISO Anda yang dimodifikasi mungkin tidak memenuhi persyaratan sehingga firmware tidak mengenalinya. Firmware EFI juga memiliki persyaratan format untuk dijalankan oleh biner, jadi bzImage Anda atau gambar kernel apa pun yang perlu dibangun dengan EFISTUB.

Anda dapat mem-boot kernel dari shell EFI dengan parameter yang ditentukan secara manual. Contoh: 2 . Anda bisa membuat startup.nshuntuk menyimpan sedikit mengetik. Anda dapat menggunakan bootloader untuk memiliki manajemen yang lebih lengkap. Anda perlu belajar ini: 2

Firmware EFI menyimpan opsi boot dalam NVRAM. QEMU saat ini tidak mempertahankan NVRAM, jadi opsi boot hilang begitu Anda menutup QEMU. Tanpa opsi boot, perusahaan mencoba menemukan \EFI\BOOT\BOOTX64.EFIuntuk mengeksekusi tetapi tidak ada di sini, sehingga tidak tahu apa yang harus boot dan meninggalkan kontrol untuk Anda. Yang perlu Anda lakukan untuk mem-boot kernel di shell EFI adalah hanya memasukkan sistem file, arahkan ke jalur yang benar, dan jalankan biner.

fs0:
    cd EFI\fedora
    grub.efi

atau

vmlinuz.efi ...

OVMF mendukung virtio-scsi sejak EDK2 r13867 .


Tautan OVFM sudah mati.
jcoffland

@ jcoffland Ini tidak benar-benar mati, direktori dapat dijelajahi hanya folder dengan rilis yang sudah usang telah dihapus. Pergi ke download.opensuse.org/repository/home:/jejb1:/UEFI dan pilih rilis terbaru yang dapat Anda temukan yang cocok dengan pola dari tautan asli.
LiveWireBT

1
Di Ubuntu modern, Anda bisa apt install ovmfdan kemudiankvm -bios OVMF.fd ...
Tobia


1

Bukan jawaban langsung tetapi karena tidak ada, Anda mungkin tertarik pada laporan bug xorriso ini - saya juga akan berkomentar di sana, tetapi singkatnya, xorriso-1.2.4 dengan revisi hulu 1044 berfungsi dengan baik untuk saya dan perangkat keras saya mendukung persis skrip ini (ini wiki yang diucapkan Rusia tetapi bagian skrip harus cukup terbaca; perhatikan efiboot.img).

Catatan yang /usr/lib/syslinux/isohdpfx.binberasal dari syslinux dan sepertinya 4.06 terbaru memiliki perubahan yang relevan di departemen EFI.

Berikut informasi lain yang bermanfaat tentang (U) EFI , dan terima kasih atas scriptletnya juga :)


1

Menggunakan skrip ini , cdke pohon kode sumber dan jalankan:

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

di mana OVMF.fddiekstraksi dari https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.zip/download

Script menghasilkan sistem file minimal dengan BusyBox, mengkompilasi kernel dan menjalankannya di QEMU dengan:

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

Kami sekarang dapat memverifikasi bahwa UEFI digunakan dari dalam QEMU sebagaimana disebutkan dalam pos ini :

ls /sys/firmware/efi

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

4
Hai dan selamat datang di situs ini. Harap tambahkan beberapa detail pada jawaban Anda. Apa perintah ini? Di mana itu harus dijalankan? Haruskah itu ditambahkan ke konfigurasi bootlaoder mungkin? Bagaimana? Dimana? Kecuali Anda menjelaskan apa ini, saya khawatir itu bukan jawaban yang berguna.
terdon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.