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. 

2回目の試み:

# 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. 

3回目の試み:

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

4回目の試み:

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. 

5番目に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)

おすすめ記事