EFI कर्नेल को QEMU (kvm) का उपयोग कैसे करें?


21

मैं QEMU (kmv) का उपयोग करके एक EFI वातावरण का अनुकरण करने की कोशिश कर रहा हूं; वर्चुअलबॉक्स को 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 शेल में गिरा हूं, बूट करने में सक्षम नहीं।

QEMU + EFI + LINUX KERNEL + शेल

यदि मैं उसी 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"

... बूट प्रक्रिया ठीक काम करती है।

यहाँ छवि विवरण दर्ज करें

मैंने उबंटू बूट फ़ाइलों को मेरे साथ बदलने की कोशिश की है, लेकिन शायद मैं पूरी तरह से इसकी कार्यक्षमता को नहीं समझता। जब मैं आईएसओ बढ़ते के बाद सिर्फ फाइलों को बदल देता हूं:

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 के बारे में?

मुझे किसकी याद आ रही है?

जवाबों:


21

OVMF का समर्थन करता है -bootके बाद से r13683 , और समर्थन -kernel -append -initrdके बाद से r13923

  1. डाउनलोड OVMF-0.1+r14071-1.1.x86_64.rpm या नया संस्करण।
  2. bios.binआरपीएम से निकालें :rpm2cpio OVMF-0.1+r14071-1.1.x86_64.rpm | cpio -idmv
  3. QEMU के लिए फर्मवेयर पैरामीटर निर्दिष्ट करें: qemu-kvm -bios ./usr/share/qemu-ovmf/bios/bios.bin -m 1G -cdrom boot.iso(Fedora के बूट के साथ परीक्षण किया गया। विशेष उपायों के साथ बनाया गया )

मैंने qemu -kernel -append -initrdकर्नेल 3.5, 3.6 और 3.8 के साथ भी परीक्षण किया ।


EFI फर्मवेयर में ISO छवि के बूट करने योग्य ( 1 ) और डिस्क के लिए अन्य के लिए प्रारूप और फ़ाइल पदानुक्रम आवश्यकताएँ हैं। आपकी संशोधित आईएसओ छवि शायद आवश्यकताओं को पूरा नहीं करती है इसलिए फर्मवेयर ने इसे नहीं पहचाना। EFI फर्मवेयर में बाइनरी को निष्पादित करने के लिए प्रारूप की आवश्यकताएं भी हैं, इसलिए आपकी bzImage या जो भी कर्नेल छवि को EFISTUB के साथ बनाया जाना चाहिए।

आप मैन्युअल रूप से निर्दिष्ट मापदंडों के साथ ईएफआई शेल से कर्नेल को बूट कर सकते हैं। उदाहरण: । आप startup.nshथोड़ा टाइप करके सेव को बना सकते हैं । अधिक पूर्ण प्रबंधन करने के लिए आप बूटलोडर्स का उपयोग कर सकते हैं। आपको ये सीखने की जरूरत है:

EFI फर्मवेयर NVRAM में बूट विकल्प बचाता है। QEMU वर्तमान में NVRAM को संरक्षित नहीं करता है, इसलिए QEMU बंद करते ही बूट विकल्प खो जाते हैं। बूट विकल्पों के बिना, फर्म \EFI\BOOT\BOOTX64.EFIनिष्पादित करने के लिए खोजने की कोशिश करता है, लेकिन यह यहां नहीं है, इसलिए यह नहीं जानता है कि बूट करने के लिए क्या है और आप पर नियंत्रण छोड़ देता है। EFI शेल में कर्नेल को बूट करने के लिए आपको क्या करना है बस एक फाइलसिस्टम दर्ज करें, एक उचित पथ पर नेविगेट करें, और एक बाइनरी निष्पादित करें।

fs0:
    cd EFI\fedora
    grub.efi

या

vmlinuz.efi ...

EDV2 r13867 के बाद से OVMF पुण्य -एससीआई का समर्थन करता है ।


OVFM लिंक मृत है।
jcoffland

@jcoffland यह वास्तव में मरा नहीं है, निर्देशिकाएं केवल ब्राउज़ करने योग्य हैं, जो पुराने रिलीज वाले फ़ोल्डर को हटा दिया गया है। पर जाएं download.opensuse.org/repositories/home:/jejb1:/UEFI और नवीनतम रिलीज आपको लगता है कि मूल लिंक से नमूने का मिलान पा सकते हैं लेने।
लाइववायरबेट

1
आधुनिक उबंटू में आप बस apt install ovmfऔर फिरkvm -bios OVMF.fd ...
टोबिया


1

कोई सीधा जवाब नहीं है, लेकिन जैसा कि आप इस xorriso Bugreport में कोई दिलचस्पी नहीं हो सकता है - मैं वहाँ भी टिप्पणी करने जा रहा हूँ, लेकिन संक्षेप में, xorriso-1.2.4 ऊपर की ओर संशोधन के साथ 1044 मेरे लिए ठीक काम करता है और मेरे हार्डवेयर के साथ खड़ा है वास्तव में यह स्क्रिप्ट (यह एक रूसी बोली जाने वाली विकी है, लेकिन स्क्रिप्ट का हिस्सा पर्याप्त रूप से सुपाच्य होना चाहिए; इस पर ध्यान दें efiboot.img)।

नोट जो /usr/lib/syslinux/isohdpfx.binsyslinux से आता है और ऐसा लगता है कि नवीनतम 4.06 में EFI विभाग में प्रासंगिक परिवर्तन हैं।

यहाँ (U) EFI पर उपयोगी ज्ञान का एक और कुँआ है , और साथ ही साथ इस प्रश्न में लिपि के लिए धन्यवाद :)


1

इस स्क्रिप्ट का उपयोग , cdकर्नेल स्रोत ट्री में करें और चलाएं:

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

https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.zip/downloadOVMF.fd से कहां निकाला गया था

स्क्रिप्ट बिजीबॉक्स के साथ एक न्यूनतम फाइल सिस्टम उत्पन्न करता है, कर्नेल को संकलित करता है और इसे QEMU में चलाता है:

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

अब हम यह पुष्टि कर सकते हैं कि UEFI का उपयोग QEMU के अंदर से किया गया था जैसा कि इस पोस्ट में बताया गया है :

ls /sys/firmware/efi

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

4
नमस्ते और साइट पर आपका स्वागत है। कृपया अपने उत्तर में कुछ विवरण जोड़ें। यह आज्ञा क्या है? इसे कहां चलाया जाना चाहिए? क्या इसे शायद बूटलायडर विन्यास में जोड़ा जाना चाहिए? कैसे? कहा पे? जब तक आप समझाते हैं कि यह क्या है, मुझे डर है कि यह एक उपयोगी उत्तर नहीं है।
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.