Documentation/Platforms/ARM
QEMU ARM guest support
QEMU has generally good support for ARM guests. It has support for nearly fifty different machines. The reason we support so many is that ARM hardware is much more widely varying than x86 hardware. ARM CPUs are generally built into "system-on-chip" (SoC) designs created by many different companies with different devices, and these SoCs are then built into machines which can vary still further even if they use the same SoC. Even with fifty boards QEMU does not cover more than a small fraction of the ARM hardware ecosystem.
Because ARM systems differ so much and in fundamental ways, typically operating system or firmware images intended to run on one machine will not run at all on any other. This is often surprising for new users who are used to the x86 world where every system looks like a standard PC. (Once the kernel has booted, most userspace software cares much less about the detail of the hardware.)
The situation for 64-bit ARM is fairly similar, except that we don't implement so many different machines.
As well as the more common "A-profile" CPUs (which have MMUs and will run Linux) we also support the Cortex-M3 and Cortex-M4 "M-profile" CPUs (which are microcontrollers used in very embedded boards. We only have two boards which use the M-profile CPU at the moment: "lm3s811evb" and "lm3s6965evb" (which are both TI Stellaris evaluation boards).
Guidelines for choosing a QEMU machine
- I have a complete system image already that works on hardware that I'd like to boot with QEMU...
- Check whether QEMU lists that machine in its '-machine help' output. If it does, that's the best place to start. If it doesn't then unfortunately you're out of luck: your image won't boot on QEMU. If it's a Linux image and you're mostly interested in the userspace software, then you may be able to extract the filesystem and use that with a different kernel which boots on a system QEMU does emulate.
- I don't really care which system I emulate, I just want to run Linux...
- Most of the machines QEMU supports have annoying limitations (small amount of RAM, no PCI or other hard disk, etc) which are there because that's what the real hardware is like. If you don't care about reproducing the idiosyncrasies of a particular bit of hardware, the best choice today is the "virt" machine. This is a platform which doesn't correspond to any real hardware and is designed for use in virtual machines. It supports PCI, virtio, recent CPUs and large amounts of RAM. The only thing it doesn't have is graphics. See this tutorial for information on getting 32-bit ARM Debian Linux running on the "virt" board.
- For 64-bit ARM "virt" is also the best choice. We don't have a link to a simple tutorial yet, though.
- The "versatilepb" machine has also often been used as a general-purpose Linux target in the past; its disadvantage is that it has a very old CPU and only 256MB of RAM, but it does at least have PCI and SCSI. You can find a description of how to install Debian on it here (the author of that tutorial has also provided some prebuilt images). You're probably better off using "virt" though.
Supported Machines
Supported in qemu-system-arm
Machine | Description |
akita | Sharp SL-C1000 (Akita) PDA (PXA270) |
ast2500-evb | Aspeed AST2500 EVB (ARM1176) |
borzoi | Sharp SL-C3100 (Borzoi) PDA (PXA270) |
canon-a1100 | Canon PowerShot A1100 IS |
cheetah | Palm Tungsten|E aka. Cheetah PDA (OMAP310) |
collie | Sharp SL-5500 (Collie) PDA (SA-1110) |
connex | Gumstix Connex (PXA255) |
cubieboard | cubietech cubieboard |
highbank | Calxeda Highbank (ECX-1000) |
imx25-pdk | ARM i.MX25 PDK board (ARM926) |
integratorcp | ARM Integrator/CP (ARM926EJ-S) |
kzm | ARM KZM Emulation Baseboard (ARM1136) |
lm3s6965evb | Stellaris LM3S6965EVB |
lm3s811evb | Stellaris LM3S811EVB |
mainstone | Mainstone II (PXA27x) |
midway | Calxeda Midway (ECX-2000) |
musicpa | l Marvell 88w8618 / MusicPal (ARM926EJ-S) |
n800 | Nokia N800 tablet aka. RX-34 (OMAP2420) |
n810 | Nokia N810 tablet aka. RX-44 (OMAP2420) |
netduino2 | Netduino 2 Machine |
none | empty machine |
nuri | Samsung NURI board (Exynos4210) |
palmetto-bmc | OpenPOWER Palmetto BMC (ARM926EJ-S) |
raspi2 | Raspberry Pi 2 |
realview-eb | ARM RealView Emulation Baseboard (ARM926EJ-S) |
realview-eb-mpcore | ARM RealView Emulation Baseboard (ARM11MPCore) |
realview-pb-a8 | ARM RealView Platform Baseboard for Cortex-A8 |
realview-pbx-a9 | ARM RealView Platform Baseboard Explore for Cortex-A9 |
sabrelite | Freescale i.MX6 Quad SABRE Lite Board (Cortex A9) |
smdkc210 | Samsung SMDKC210 board (Exynos4210) |
spitz | Sharp SL-C3000 (Spitz) PDA (PXA270) |
sx1 | Siemens SX1 (OMAP310) V2 |
sx1-v1 | Siemens SX1 (OMAP310) V1 |
terrier | Sharp SL-C3200 (Terrier) PDA (PXA270) |
tosa | Sharp SL-6000 (Tosa) PDA (PXA255) |
verdex | Gumstix Verdex (PXA270) |
versatileab | ARM Versatile/AB (ARM926EJ-S) |
versatilepb | ARM Versatile/PB (ARM926EJ-S) |
vexpress-a15 | ARM Versatile Express for Cortex-A15 |
vexpress-a9 | ARM Versatile Express for Cortex-A9 |
virt-2.6 | QEMU 2.6 ARM Virtual Machine |
virt-2.7 | QEMU 2.7 ARM Virtual Machine |
virt | QEMU 2.8 ARM Virtual Machine (alias of virt-2.8) |
virt-2.8 | QEMU 2.8 ARM Virtual Machine |
xilinx-zynq-a9 | Xilinx Zynq Platform Baseboard for Cortex-A9 |
z2 | Zipit Z2 (PXA27x) |
Supported in qemu-system-aarch64
Machine | Description |
akita | Sharp SL-C1000 (Akita) PDA (PXA270) |
ast2500-evb | Aspeed AST2500 EVB (ARM1176) |
borzoi | Sharp SL-C3100 (Borzoi) PDA (PXA270) |
canon-a1100 | Canon PowerShot A1100 IS |
cheetah | Palm Tungsten|E aka. Cheetah PDA (OMAP310) |
collie | Sharp SL-5500 (Collie) PDA (SA-1110) |
connex | Gumstix Connex (PXA255) |
cubieboard | cubietech cubieboard |
highbank | Calxeda Highbank (ECX-1000) |
imx25-pdk | ARM i.MX25 PDK board (ARM926) |
integratorcp | ARM Integrator/CP (ARM926EJ-S) |
kzm | ARM KZM Emulation Baseboard (ARM1136) |
lm3s6965evb | Stellaris LM3S6965EVB |
lm3s811evb | Stellaris LM3S811EVB |
mainstone | Mainstone II (PXA27x) |
midway | Calxeda Midway (ECX-2000) |
musicpa | l Marvell 88w8618 / MusicPal (ARM926EJ-S) |
n800 | Nokia N800 tablet aka. RX-34 (OMAP2420) |
n810 | Nokia N810 tablet aka. RX-44 (OMAP2420) |
netduino2 | Netduino 2 Machine |
none | empty machine |
nuri | Samsung NURI board (Exynos4210) |
palmetto-bmc | OpenPOWER Palmetto BMC (ARM926EJ-S) |
raspi2 | Raspberry Pi 2 |
realview-eb | ARM RealView Emulation Baseboard (ARM926EJ-S) |
realview-eb-mpcore | ARM RealView Emulation Baseboard (ARM11MPCore) |
realview-pb-a8 | ARM RealView Platform Baseboard for Cortex-A8 |
realview-pbx-a9 | ARM RealView Platform Baseboard Explore for Cortex-A9 |
sabrelite | Freescale i.MX6 Quad SABRE Lite Board (Cortex A9) |
smdkc210 | Samsung SMDKC210 board (Exynos4210) |
spitz | Sharp SL-C3000 (Spitz) PDA (PXA270) |
sx1 | Siemens SX1 (OMAP310) V2 |
sx1-v1 | Siemens SX1 (OMAP310) V1 |
terrier | Sharp SL-C3200 (Terrier) PDA (PXA270) |
tosa | Sharp SL-6000 (Tosa) PDA (PXA255) |
verdex | Gumstix Verdex (PXA270) |
versatileab | ARM Versatile/AB (ARM926EJ-S) |
versatilepb | ARM Versatile/PB (ARM926EJ-S) |
vexpress-a15 | ARM Versatile Express for Cortex-A15 |
vexpress-a9 | ARM Versatile Express for Cortex-A9 |
virt-2.6 | QEMU 2.6 ARM Virtual Machine |
virt-2.7 | QEMU 2.7 ARM Virtual Machine |
virt | QEMU 2.8 ARM Virtual Machine (alias of virt-2.8) |
virt-2.8 | QEMU 2.8 ARM Virtual Machine |
xilinx-zynq-a9 | Xilinx Zynq Platform Baseboard for Cortex-A9 |
xlnx-ep108 | Xilinx ZynqMP EP108 board |
xlnx-zcu102 | Xilinx ZynqMP ZCU102 board |
z2 | Zipit Z2 (PXA27x) |
Tips
To see a printout of all the supported machines use:
qemu-system-arm -M \?
or
qemu-system-aarch64 -M \?
Suggested command-line
qemu-system-aarch64 -m <memory size> -M <machine name> -drive if=none,file=<hard drive file name>,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0
Picture
Open Source Media Center running in Raspberry Pi target of QEMU
Contacts
Maintainer: Peter Maydell peter.maydell@linaro.org
QEMU ARM developer mailing list page