AArch64/ARM64의 QEMU 및 검은색 화면

AArch64/ARM64의 QEMU 및 검은색 화면

표적

저는 부트 로더를 개발 중이고 시뮬레이션 작업 흐름이 훨씬 빠르기 때문에 실제 AArch64 하드웨어에서 AArch64(ARM64)의 부팅 프로세스(모든 부팅 프로세스)를 시뮬레이션하고 싶습니다.

질문

QEMU를 사용하려고 시도할 때마다 검은색 화면이 나타납니다. 부트로더를 실행하고 Linux를 직접 부팅해 보았습니다. 오류 메시지가 없습니다.

다양한 시도

첫 시도:

# sudo apt-get install qemu qemu-system-arm qemu-efi-aarch64 qemu-utils
qemu-system-aarch64 -nographic -machine virt,gic-version=3 -m 512M -smp 4 some-aarch64-linux.iso
# Blank screen. Press ctrl+a c to exit. 

두 번째 시도:

# Create an EFI bootloader
dd if=/dev/zero of=flash0.img bs=1M count=64
dd if=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd of=flash0.img conv=notrunc

qemu-system-aarch64 -nographic -machine virt,gic-version=3 -m 512M -smp 4 \
-drive file=flash0.img,format=raw,if=pflash
# Blank screen. Press ctrl+a c to exit. 

세 번째 시도:

qemu-img create -f qcow2 alpine.img 8G
wget -O alpine-virt.iso http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/aarch64/alpine-virt-3.12.1-aarch64.iso
sudo kvm -machine virt -hda alpine.img -cdrom alpine-virt.iso -m 512
> KVM is not supported for this guest CPU type
> kvm_init_vcpu failed: Invalid argument

네 번째 시도:

qemu-img create -f qcow2 alpine.img 8G
wget -O alpine-virt.iso http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/aarch64/alpine-virt-3.12.1-aarch64.iso
qemu-system-aarch64 -nographic -machine virt -hda alpine.img -cdrom alpine-virt.iso -m 512
# Blank screen. Press ctrl+a c to exit. 

다섯 번째로 x86-64 시스템에서 Docker를 사용해 보십시오.

docker run -it --rm --name qemu-container \
  -e QEMU_ARCH=aarch64 \
  -e QEMU_HDA=/tmp/hda.qcow2 \
  -e QEMU_HDA_SIZE=1G \
  -e QEMU_CPU=4 \
  -e QEMU_RAM=512 \
  -v ${PWD}/alpine-virt-3.12.1-aarch64.iso:/tmp/os.iso:ro \
  -e QEMU_CDROM=/tmp/os.iso \
  -e QEMU_BOOT='order=d' \
  -e QEMU_PORTS='2375 2376' \
  tianon/qemu start-qemu -machine virt
# Results:
# + qemu-img create -f qcow2 -o preallocation=off /tmp/hda.qcow2 1G
# Formatting '/tmp/hda.qcow2', fmt=qcow2 cluster_size=65536 preallocation=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16
# + exec qemu-system-aarch64 -smp 4 -m 512 -drive file=/tmp/hda.qcow2,index=0,media=disk,discard=unmap,detect-zeroes=unmap,if=none,id=hda -device virtio-scsi-pci -device scsi-hd,drive=hda -cdrom /tmp/os.iso -boot order=d -netdev user,hostname=30047d3b64c0,hostfwd=tcp::22-:22,hostfwd=udp::22-:22,hostfwd=tcp::2375-:2375,hostfwd=udp::2375-:2375,hostfwd=tcp::2376-:2376,hostfwd=udp::2376-:2376,id=net -device virtio-net-pci,netdev=net -serial stdio -vnc :0
# Frozen. Press ctrl+c to send a signal

이전 연구들:

답변1

실패하다(빈 화면이 나타남):

qemu-system-aarch64 \
-machine virt \
-serial stdio \
-bios u-boot.bin

성공(부트로더 실행 중):

qemu-system-aarch64 \
-machine virt \
-serial stdio \
-cpu cortex-a53 \
-bios u-boot.bin

해결책:

호스트와 게스트 간의 서로 다른 아키텍처에서는 QEMU가 기본적으로 호스트 CPU 가상화를 사용하지 않도록 CPU 플래그를 추가합니다.

-cpu cortex-a53

존재하다정확히 똑같다호스트 하드웨어를 에뮬레이션하는 경우(x86-64 에뮬레이션/하드웨어가 아닌 경우) 이 플래그는 필요하지 않지만 제 경우에는 필요합니다. 실제 AArch64 하드웨어에서 AArch64를 에뮬레이트하는 QEMU에 이 매개변수를 추가하면 부트로더가 실행되어 콘솔에 출력을 표시할 수 있습니다.

~$ qemu-system-aarch64 -machine virt -serial stdio -cpu cortex-a53 -bios u-boot.bin

U-Boot 2021.01-rc1-g896cc5aa (Nov 06 2020 - 23:33:35 -0800)

DRAM:  128 MiB
Flash: 128 MiB
*** Warning - bad CRC, using default environment

In:    pl011@9000000
Out:   pl011@9000000
Err:   pl011@9000000
Net:   No ethernet found.
Hit any key to stop autoboot:  0
starting USB...
No working controllers found
USB is stopped. Please issue 'usb start' first.
scanning bus for devices...
...

달리기 qemu-system-aarch64 -cpu help:

Available CPUs:
  arm1026
  arm1136
  arm1136-r2
  arm1176
  arm11mpcore
  arm926
  arm946
  cortex-a15
  cortex-a53
  cortex-a57
  cortex-a7
  cortex-a8
  cortex-a9
  cortex-m3
  cortex-m4
  cortex-r5
  pxa250
  pxa255
  pxa260
  pxa261
  pxa262
  pxa270-a0
  pxa270-a1
  pxa270
  pxa270-b0
  pxa270-b1
  pxa270-c0
  pxa270-c5
  sa1100
  sa1110
  ti925t
  host (only available in KVM mode)

관련 정보