I am trying to create two VMs from alpine Linux image in QEMU. One for X86 and for ARM64.
For X86
qemu-system-x86_64 \
-m 512 \
-hda alpine_x86.qcow2 \
-cdrom path/to/img.iso \
-boot d
For ARM64
qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-m 2048 \
-hda alpine_arm.qcow2 \
-cdrom path/to/img.iso \
-drive if=pflash,format=raw,file=flash.img \ <--------- ?
-nographic
Comparing the two flows, specifying -cdrom
in X86 flow is enough. But in the ARM64 case, I need to specify pflash
option.
I checked the ARM64 image using file
and it says bootable.
file alpine-standard-3.20.1-aarch64.iso
alpine-standard-3.20.1-aarch64.iso: ISO 9660 CD-ROM filesystem data (DOS/MBR boot sector) 'alpine-std 3.20.1 aarch64' (bootable)
If I do not specify the pflash, QEMU ARM VM does not come up.
Is this a QEMU limitation or there exists a technical reason behind this?
In fact both x86 and aarch64 VMs need a BIOS to be able to boot from a CDROM ISO image. The difference is just that the x86 PC machine type will start a BIOS by default even if you don't explicitly ask for one, whereas the AArch64 virt machine type defaults to no BIOS, and you have to explicitly ask for one.
This is mostly for historical reasons, both within QEMU and with the two architectures more generally: