QEMU (kvm)를 사용하여 EFI 커널을 부팅하는 방법은 무엇입니까?


21

QEMU (kmv)를 사용하여 EFI 환경을 에뮬레이션하려고합니다. archboot를 사용하여 virtualbox를 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 + 리눅스 커널 + 쉘

동일한 EFI 환경을 사용하는 최신 Ubuntu 릴리스를 사용하는 경우

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"

... 부팅 프로세스가 제대로 작동합니다.

여기에 이미지 설명을 입력하십시오

우분투 부팅 파일을 내 것으로 바꾸려고했지만 그 기능을 완전히 이해하지 못할 수도 있습니다. 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는 어떻습니까?

내가 무엇을 놓치고 있습니까?

답변:


21

OVMF 지원 -boot이후 r13683 및 지원 -kernel -append -initrd이후 r13923 .

  1. OVMF-0.1+r14071-1.1.x86_64.rpm최신 버전을 다운로드하십시오 .
  2. bios.binrpm에서 추출 하십시오.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의 boot.iso로 테스트 )

또한 qemu -kernel -append -initrd커널 3.5, 3.6 및 3.8로 테스트 했습니다.


EFI 펌웨어에는 ISO 이미지 부팅 가능 ( 1 ) 및 기타 디스크 용 형식 및 파일 계층 요구 사항이 있습니다 . 수정 한 ISO 이미지가 요구 사항을 충족하지 않았기 때문에 펌웨어가 인식하지 못했습니다. EFI 펌웨어에는 바이너리 실행에 필요한 형식 요구 사항도 있으므로 bzImage 또는 EFISTUB를 사용하여 커널 이미지를 빌드해야합니다.

매개 변수를 수동으로 지정하여 EFI 셸에서 커널을 부팅 할 수 있습니다. 예 : 2 . startup.nsh작은 타이핑을 저장하기 위해 a 를 만들 수 있습니다 . 부트 로더를 사용하면보다 완벽한 관리가 가능합니다. 다음을 배워야합니다. 2

EFI 펌웨어는 부팅 옵션을 NVRAM에 저장합니다. QEMU는 현재 NVRAM을 유지하지 않으므로 QEMU를 닫으면 부팅 옵션이 손실됩니다. 부팅 옵션이 없으면 회사는 \EFI\BOOT\BOOTX64.EFI실행 하려고 시도 하지만 여기에 없으므로 부팅 할 대상을 모르고 사용자에게 제어 권한을 부여합니다. EFI 셸에서 커널을 부팅하려면 파일 시스템을 입력하고 적절한 경로로 이동 한 다음 바이너리를 실행하면됩니다.

fs0:
    cd EFI\fedora
    grub.efi

또는

vmlinuz.efi ...

OVMF는 EDK2 r13867 부터 virtio-scsi를 지원 합니다.


OVFM 연결이 끊어졌습니다.
jcoffland

@jcoffland 정말 죽지 ​​않았으며, 디렉토리는 구식 릴리스가있는 폴더 만 제거 가능합니다. download.opensuse.org/repositories/home:/jejb1:/UEFI로 이동 하여 원래 링크의 패턴과 일치하는 최신 릴리스를 선택하십시오.
LiveWireBT

1
현대 우분투에서는 apt install ovmf다음과 같이 할 수 있습니다kvm -bios OVMF.fd ...
Tobia


1

당신이에 관심이있을 수있는 것도이없는 것처럼 아니 직접적인 대답은하지만 이 xorriso의 버그 보고서 - 나도 거기에 대해 언급하려고 만하고있어 단기의와 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 에서 추출 된 위치

이 스크립트는 BusyBox를 사용하여 최소 파일 시스템을 생성하고 커널을 컴파일하여 다음을 사용하여 QEMU에서 실행합니다.

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

이제이 게시물에서 언급 한 바와 같이 QEMU 내부에서 UEFI가 사용되었는지 확인할 수 있습니다 .

ls /sys/firmware/efi

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

4
안녕하세요. 사이트에 오신 것을 환영합니다. 답변에 세부 사항을 추가하십시오. 이 명령은 무엇입니까? 어디에서 실행해야합니까? bootlaoder 구성에 추가해야합니까? 방법? 어디에? 이것이 무엇인지 설명하지 않으면 유용한 답변이 아닌 것 같습니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.