ターゲット
私はブートローダーを開発しており、シミュレーションのワークフローがはるかに速いので、実際の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
以前の研究:
- QemuとAARCH64(したがって、不適切なコマンドが使用されました)
- QEMU AArch64がログメッセージなしで中断されたようです。(SOは不適切なアーキテクチャを使用します)
- https://linuxhint.com/install_qemu_debian/(同じ黒い画面)
- https://futurewei-cloud.github.io/ARM-Datacenter/qemu/how-to-launch-aarch64-vm/(同じ黒い画面)
ベストアンサー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)