Comparison and Analysis of ARM Platforms in QEMU: versatilepb, vexpress, and virt
When using QEMU to simulate ARM architecture, selecting the appropriate platform (Machine Type) is crucial for successfully running the system. QEMU offers several ARM platforms for developers, among which the three most common and practical are: <span>versatilepb</span>, <span>vexpress</span> (such as <span>vexpress-a9</span> and <span>vexpress-a15</span>), and <span>virt</span>. They have significant differences in supported architectures, functional features, and usage scenarios.
🔸1. <span>versatilepb</span> (or simply <span>versatile</span>)
Features:
- A classic ARMv5/v6/v7 platform, belonging to the ARM926/ARM1176 era of older platforms.
- Well-supported by QEMU simulation, it is one of the earliest ARM platforms supported by QEMU.
- Suitable for 32-bit ARM (armhf).
- Supports direct booting of the Linux kernel via
<span>-kernel</span>, used in conjunction with<span>initrd</span>. - Typically uses IDE or SD card emulated block devices, and does not support modern virtio.
Usage Limitations:
- Does not support multi-core SMP (only single-core).
- Supported memory size is limited (maximum about 256MB).
- Does not support modern peripherals (such as USB 3, virtio-net, virtio-blk, etc.).
- Very suitable for minimal system testing, such as BusyBox, older versions of Linux, etc.
Example Command:
qemu-system-arm -M versatilepb -cpu arm1176 -m 256
-kernel kernel-qemu-armhf
-dtb versatile-pb.dtb
-append "root=/dev/sda2 console=ttyAMA0"
-drive file=raspios.img,format=raw,if=ide
-serial stdio
🔸2. <span>vexpress-a9</span> / <span>vexpress-a15</span>
Features:
- A relatively modern ARMv7 platform, supporting Cortex-A9 (vexpress-a9) or Cortex-A15 (vexpress-a15).
- Supports SMP multi-core, with a maximum of 4 cores.
- Supports larger memory (1G+).
- Partially supports virtio, but still primarily uses traditional devices.
- Still an armhf architecture (32-bit ARM).
Advantages:
- Can test more complex 32-bit systems, such as lightweight systems with graphical interfaces.
- Used to simulate newer devices, closer to real hardware than versatile.
- Stronger performance simulation capabilities, can be used as a test target for Buildroot, Debian.
Example Command:
qemu-system-arm -M vexpress-a9 -m 1024 -smp 4
-kernel zImage
-dtb vexpress-v2p-ca9.dtb
-append "console=ttyAMA0 root=/dev/mmcblk0p2 rw"
-drive file=sdcard.img,if=sd,format=raw
-serial stdio
🔸3. <span>virt</span> (suitable for AArch64 / aarch64)
Features:
- Modern general-purpose ARM virtual platform, optimized for QEMU, not a specific development board in reality.
- Supports 64-bit ARM (aarch64) and 32-bit ARM (armhf) (requires specifying the appropriate CPU).
- Supports virtio devices: virtio-blk, virtio-net, virtio-gpu, etc., suitable for modern Linux.
- Fully supports UEFI, ACPI, capable of booting standard Linux distribution images.
- Recommended for simulating modern ARM servers (such as cloud ARM, Apple M1-like systems).
Advantages:
- Strongest simulation capabilities: supports SMP, various virtio devices, PCI, networking, etc.
- Supports standard device drivers, modern Linux systems, and can even run official ARM64 Ubuntu Server.
- Recommended for building and testing aarch64 systems, such as Buildroot aarch64, Debian/Ubuntu arm64.
Example Command (UEFI):
qemu-system-aarch64 -M virt -cpu cortex-a72 -m 2048 -smp 4
-bios QEMU_EFI.fd
-drive if=virtio,file=disk.img,format=raw
-nographic
📊 Summary Comparison Table:
| Feature | <span>versatilepb</span> |
<span>vexpress-a9/a15</span> |
<span>virt</span> |
|---|---|---|---|
| Architecture Support | armhf (32-bit) | armhf (32-bit) | arm64 (aarch64) / armhf |
| Simulated CPU | ARM1176 | Cortex-A9/A15 | Cortex-A72/A57/Neoverse V1, etc. |
| Is it a Real Board? | Yes (old development board) | Yes (ARM official development board) | No (QEMU virtual platform) |
| SMP Multi-core Support | ❌ (single-core) | ✅ (up to 4 cores) | ✅ (up to 255 cores) |
| Maximum Memory | 256MB | ~1GB | Several GB or more |
| virtio Support | ❌ | Partial support | ✅ (full support) |
| File System Support Method | IDE / SD | SD / SATA | virtio-blk / SCSI |
| Graphics Output Support | Basic framebuffer | Supported (LCD) | Supports virtio-gpu, OpenGL, etc. |
| Typical Use Cases | Old systems, introductory experiments | Buildroot, Debian armhf | Ubuntu/Debian arm64, KVM |
✅ Recommendations:
- Debugging minimal Linux or Raspberry Pi OS armhf: Use
<span>versatilepb</span>(with kernel-qemu). - Building or running 32-bit Buildroot/Debian systems: Recommended
<span>vexpress-a9</span>. - Running 64-bit Linux, Ubuntu, Debian systems, server environment simulation: Strongly recommended to use
<span>virt</span>+<span>aarch64</span>.