Original path: https://wiki.qemu.org/Documentation/Platforms/ARM
QEMU usually has good support for ARM clients. It supports nearly fifty different machines. The reason we support this much is that the ARM hardware is much more variable than the x86 hardware. ARM CPU s are usually built into "on-chip systems" (SoC) designs created by many different companies using different devices, and then these SoCs are built into machines that may change even if they use the same SoC. Even with fifty boards, QEMU cannot cover a small part of the ARM hardware ecosystem.
Because ARM systems differ greatly in basic aspects, operating systems or firmware images that are usually intended to run on one computer cannot run on any other computer. This is often surprising for new users accustomed to the x86 world, as each system looks like a standard PC. (Once the kernel is started, most user space software is less concerned with hardware details.)
The situation with 64-bit ARM is very similar, but we don't implement so many different computers.
In addition to the more common "A-profile" CPUs (which have MMU s and will run Linux), we also support Cortex-M3 and Cortex-M4 "M-profile" CPUs (which are microcontrollers for very embedded circuit boards). We currently only have two motherboards that use the M-profile CPU: "lm3s811evb" and "lm3s6965evb" (both TI Stellaris evaluation boards).
1. Guidelines for Selecting QEMU Machines
1. Exact simulation of existing hardware
If you already have a complete system image that you can run on hardware and want to start using QEMU, check to see if QEMU lists the computer in its'-machine help'output.
If so, that's the best starting point. If not, unfortunately you are unlucky: your image cannot be started on QEMU.
If it's a Linux image and you're most interested in user space software, you can extract the file system and use it with other cores launched on a QEMU-emulated system.
2. Use virt machine to simulate common ARM system
If you don't care about reproducing the characteristics of a particular hardware, such as a small amount of RAM, no PCI or other hard drive, and you just want to run Linux, then the best option is to use:
-M virt
virt is a platform that does not correspond to any real hardware and is designed for use in virtual machines.
It supports PCI, virtio, the latest cpu and a lot of RAM.
For information on running 32-bit ARM Debian Linux on the virt board, see https://translatedcode.wordpress.com/2016/11/03/installing-debian-on-qemus-32-bit-arm-virt-board/ .
For 64-bit ARM,'virt'is also the best option, as seen in the 64-bit ARM Debian Linux settings https://translatedcode.wordpress.com/2017/07/24/installing-debian-on-qemus-64-bit-arm-virt-board/ .
The versatilepb machine used to be a common Linux target too; its disadvantage is that it has a very old CPU with only 256 MB of RAM, but it has at least PCI and SCSI. You can use the https://www.aurel32.net/info/debian_arm_qemu.php Find a description of how to install Debian (the author of the tutorial also provided some pre-built images at: https://people.debian.org/~aurel32/qemu/armel/). You'd better use "virt"
1. Client Core Configuration for virt Computers
"defconfig" for Linux arm and arm64 should include the correct device drivers for virtio and PCI controllers; Some older kernel versions, especially for 32-bit Arm, do not have everything enabled by default. If you do not see the expected PCI device, check that your guest configuration has:
CONFIG_PCI=y CONFIG_VIRTIO_PCI=y CONFIG_PCI_HOST_GENERIC=y
2. virt computer graphics
Graphics are also available, but unlike x86, the default display device is not enabled: should you start with'-device?' Select from the Display Devices section of. A good choice is to use:
-device virtio-gpu-pci
The following Linux kernel options (and the common "virtio PCI for the virt machine" option listed earlier) are enabled:
CONFIG_DRM=y CONFIG_DRM_VIRTIO_GPU=y
In addition, for some reason, from v2. Starting with 12, SDL graphics windows may not open in some cases, so you may need to use other methods, such as VNC:
-vnc :0
Then connect to it by:
vinagre :5900
3. Examples of using canon-a1100 machine
Canon-a1100 machines do not have Linux support - you must use special firmware here, such as "barebox". To build a bare metal image, download a compressed package from A and compile it as follows:
tar -xjf barebox-....tar.bz2 cd barebox-... cp ./arch/arm/configs/canon-a1100_defconfig .config make CROSS_PREFIX=arm-linux-gnu- ARCH=arm CC=arm-linux-gnu-gcc \ LD=arm-linux-gnu-ld OBJCOPY=arm-linux-gnu-objcopy olddefconfig make CROSS_PREFIX=arm-linux-gnu- ARCH=arm CC=arm-linux-gnu-gcc \ LD=arm-linux-gnu-ld OBJCOPY=arm-linux-gnu-objcopy -j8
Then you can run the image like this:
qemu-system-arm -M canon-a1100 -serial stdio -display none -bios barebox.canon-a1100.bin
2. Supported Machines
1. qemu-system-arm support machine
akita Sharp SL-C1000 (Akita) PDA (PXA270) ast2500-evb Aspeed AST2500 EVB (ARM1176) ast2600-evb Aspeed AST2600 EVB (Cortex-A7) borzoi Sharp SL-C3100 (Borzoi) PDA (PXA270) canon-a1100 Canon PowerShot A1100 IS (ARM946) cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310) collie Sharp SL-5500 (Collie) PDA (SA-1110) connex Gumstix Connex (PXA255) cubieboard cubietech cubieboard (Cortex-A8) emcraft-sf2 SmartFusion2 SOM kit from Emcraft (M2S010) fp5280g2-bmc Inspur FP5280G2 BMC (ARM1176) fuji-bmc Facebook Fuji BMC (Cortex-A7) g220a-bmc Bytedance G220A BMC (ARM1176) highbank Calxeda Highbank (ECX-1000) imx25-pdk ARM i.MX25 PDK board (ARM926) integratorcp ARM Integrator/CP (ARM926EJ-S) kudo-bmc Kudo BMC (Cortex-A9) kzm ARM KZM Emulation Baseboard (ARM1136) lm3s6965evb Stellaris LM3S6965EVB (Cortex-M3) lm3s811evb Stellaris LM3S811EVB (Cortex-M3) mainstone Mainstone II (PXA27x) mcimx6ul-evk Freescale i.MX6UL Evaluation Kit (Cortex-A7) mcimx7d-sabre Freescale i.MX7 DUAL SABRE (Cortex-A7) microbit BBC micro:bit (Cortex-M0) midway Calxeda Midway (ECX-2000) mps2-an385 ARM MPS2 with AN385 FPGA image for Cortex-M3 mps2-an386 ARM MPS2 with AN386 FPGA image for Cortex-M4 mps2-an500 ARM MPS2 with AN500 FPGA image for Cortex-M7 mps2-an505 ARM MPS2 with AN505 FPGA image for Cortex-M33 mps2-an511 ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3 mps2-an521 ARM MPS2 with AN521 FPGA image for dual Cortex-M33 mps3-an524 ARM MPS3 with AN524 FPGA image for dual Cortex-M33 mps3-an547 ARM MPS3 with AN547 FPGA image for Cortex-M55 musca-a ARM Musca-A board (dual Cortex-M33) musca-b1 ARM Musca-B1 board (dual Cortex-M33) musicpal 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 (Cortex-M3) netduinoplus2 Netduino Plus 2 Machine (Cortex-M4) none empty machine npcm750-evb Nuvoton NPCM750 Evaluation Board (Cortex-A9) nuri Samsung NURI board (Exynos4210) orangepi-pc Orange Pi PC (Cortex-A7) palmetto-bmc OpenPOWER Palmetto BMC (ARM926EJ-S) quanta-gbs-bmc Quanta GBS (Cortex-A9) quanta-gsj Quanta GSJ (Cortex-A9) quanta-q71l-bmc Quanta-Q71l BMC (ARM926EJ-S) rainier-bmc IBM Rainier BMC (Cortex-A7) raspi0 Raspberry Pi Zero (revision 1.2) raspi1ap Raspberry Pi A+ (revision 1.1) raspi2b Raspberry Pi 2B (revision 1.1) 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 romulus-bmc OpenPOWER Romulus BMC (ARM1176) sabrelite Freescale i.MX6 Quad SABRE Lite Board (Cortex-A9) smdkc210 Samsung SMDKC210 board (Exynos4210) sonorapass-bmc OCP SonoraPass BMC (ARM1176) spitz Sharp SL-C3000 (Spitz) PDA (PXA270) stm32vldiscovery ST STM32VLDISCOVERY (Cortex-M3) supermicrox11-bmc Supermicro X11 BMC (ARM926EJ-S) swift-bmc OpenPOWER Swift BMC (ARM1176) (deprecated) sx1 Siemens SX1 (OMAP310) V2 sx1-v1 Siemens SX1 (OMAP310) V1 tacoma-bmc OpenPOWER Tacoma BMC (Cortex-A7) 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.10 QEMU 2.10 ARM Virtual Machine virt-2.11 QEMU 2.11 ARM Virtual Machine virt-2.12 QEMU 2.12 ARM Virtual Machine virt-2.6 QEMU 2.6 ARM Virtual Machine virt-2.7 QEMU 2.7 ARM Virtual Machine virt-2.8 QEMU 2.8 ARM Virtual Machine virt-2.9 QEMU 2.9 ARM Virtual Machine virt-3.0 QEMU 3.0 ARM Virtual Machine virt-3.1 QEMU 3.1 ARM Virtual Machine virt-4.0 QEMU 4.0 ARM Virtual Machine virt-4.1 QEMU 4.1 ARM Virtual Machine virt-4.2 QEMU 4.2 ARM Virtual Machine virt-5.0 QEMU 5.0 ARM Virtual Machine virt-5.1 QEMU 5.1 ARM Virtual Machine virt-5.2 QEMU 5.2 ARM Virtual Machine virt-6.0 QEMU 6.0 ARM Virtual Machine virt-6.1 QEMU 6.1 ARM Virtual Machine virt QEMU 6.2 ARM Virtual Machine (alias of virt-6.2) virt-6.2 QEMU 6.2 ARM Virtual Machine witherspoon-bmc OpenPOWER Witherspoon BMC (ARM1176) xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9 z2 Zipit Z2 (PXA27x)
2. qemu-system-aarch64 Support Machine
akita Sharp SL-C1000 (Akita) PDA (PXA270) ast2500-evb Aspeed AST2500 EVB (ARM1176) ast2600-evb Aspeed AST2600 EVB (Cortex-A7) borzoi Sharp SL-C3100 (Borzoi) PDA (PXA270) canon-a1100 Canon PowerShot A1100 IS (ARM946) cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310) collie Sharp SL-5500 (Collie) PDA (SA-1110) connex Gumstix Connex (PXA255) cubieboard cubietech cubieboard (Cortex-A8) emcraft-sf2 SmartFusion2 SOM kit from Emcraft (M2S010) fp5280g2-bmc Inspur FP5280G2 BMC (ARM1176) fuji-bmc Facebook Fuji BMC (Cortex-A7) g220a-bmc Bytedance G220A BMC (ARM1176) highbank Calxeda Highbank (ECX-1000) imx25-pdk ARM i.MX25 PDK board (ARM926) integratorcp ARM Integrator/CP (ARM926EJ-S) kudo-bmc Kudo BMC (Cortex-A9) kzm ARM KZM Emulation Baseboard (ARM1136) lm3s6965evb Stellaris LM3S6965EVB (Cortex-M3) lm3s811evb Stellaris LM3S811EVB (Cortex-M3) mainstone Mainstone II (PXA27x) mcimx6ul-evk Freescale i.MX6UL Evaluation Kit (Cortex-A7) mcimx7d-sabre Freescale i.MX7 DUAL SABRE (Cortex-A7) microbit BBC micro:bit (Cortex-M0) midway Calxeda Midway (ECX-2000) mps2-an385 ARM MPS2 with AN385 FPGA image for Cortex-M3 mps2-an386 ARM MPS2 with AN386 FPGA image for Cortex-M4 mps2-an500 ARM MPS2 with AN500 FPGA image for Cortex-M7 mps2-an505 ARM MPS2 with AN505 FPGA image for Cortex-M33 mps2-an511 ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3 mps2-an521 ARM MPS2 with AN521 FPGA image for dual Cortex-M33 mps3-an524 ARM MPS3 with AN524 FPGA image for dual Cortex-M33 mps3-an547 ARM MPS3 with AN547 FPGA image for Cortex-M55 musca-a ARM Musca-A board (dual Cortex-M33) musca-b1 ARM Musca-B1 board (dual Cortex-M33) musicpal 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 (Cortex-M3) netduinoplus2 Netduino Plus 2 Machine (Cortex-M4) none empty machine npcm750-evb Nuvoton NPCM750 Evaluation Board (Cortex-A9) nuri Samsung NURI board (Exynos4210) orangepi-pc Orange Pi PC (Cortex-A7) palmetto-bmc OpenPOWER Palmetto BMC (ARM926EJ-S) quanta-gbs-bmc Quanta GBS (Cortex-A9) quanta-gsj Quanta GSJ (Cortex-A9) quanta-q71l-bmc Quanta-Q71l BMC (ARM926EJ-S) rainier-bmc IBM Rainier BMC (Cortex-A7) raspi0 Raspberry Pi Zero (revision 1.2) raspi1ap Raspberry Pi A+ (revision 1.1) raspi2b Raspberry Pi 2B (revision 1.1) raspi3ap Raspberry Pi 3A+ (revision 1.0) raspi3b Raspberry Pi 3B (revision 1.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 romulus-bmc OpenPOWER Romulus BMC (ARM1176) sabrelite Freescale i.MX6 Quad SABRE Lite Board (Cortex-A9) sbsa-ref QEMU 'SBSA Reference' ARM Virtual Machine smdkc210 Samsung SMDKC210 board (Exynos4210) sonorapass-bmc OCP SonoraPass BMC (ARM1176) spitz Sharp SL-C3000 (Spitz) PDA (PXA270) stm32vldiscovery ST STM32VLDISCOVERY (Cortex-M3) supermicrox11-bmc Supermicro X11 BMC (ARM926EJ-S) swift-bmc OpenPOWER Swift BMC (ARM1176) (deprecated) sx1 Siemens SX1 (OMAP310) V2 sx1-v1 Siemens SX1 (OMAP310) V1 tacoma-bmc OpenPOWER Tacoma BMC (Cortex-A7) 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.10 QEMU 2.10 ARM Virtual Machine virt-2.11 QEMU 2.11 ARM Virtual Machine virt-2.12 QEMU 2.12 ARM Virtual Machine virt-2.6 QEMU 2.6 ARM Virtual Machine virt-2.7 QEMU 2.7 ARM Virtual Machine virt-2.8 QEMU 2.8 ARM Virtual Machine virt-2.9 QEMU 2.9 ARM Virtual Machine virt-3.0 QEMU 3.0 ARM Virtual Machine virt-3.1 QEMU 3.1 ARM Virtual Machine virt-4.0 QEMU 4.0 ARM Virtual Machine virt-4.1 QEMU 4.1 ARM Virtual Machine virt-4.2 QEMU 4.2 ARM Virtual Machine virt-5.0 QEMU 5.0 ARM Virtual Machine virt-5.1 QEMU 5.1 ARM Virtual Machine virt-5.2 QEMU 5.2 ARM Virtual Machine virt-6.0 QEMU 6.0 ARM Virtual Machine virt-6.1 QEMU 6.1 ARM Virtual Machine virt QEMU 6.2 ARM Virtual Machine (alias of virt-6.2) virt-6.2 QEMU 6.2 ARM Virtual Machine witherspoon-bmc OpenPOWER Witherspoon BMC (ARM1176) xilinx-zynq-a9 Xilinx Zynq Platform Baseboard for Cortex-A9 xlnx-versal-virt Xilinx Versal Virtual development board xlnx-zcu102 Xilinx ZynqMP ZCU102 board with 4xA53s and 2xR5Fs based on the value of smp z2 Zipit Z2 (PXA27x)
3. Skills
To view the printouts of all supported computers, use:
qemu-system-arm -M help
or
qemu-system-aarch64 -M help
4. Direction of Construction
./configure --target-list=arm-softmmu,aarch64-softmmu && make
5. Recommended command line
Using virtio-mmio (and virt machine)
qemu-system-aarch64 -m <memory size> -M virt -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
However, for more powerful clients, discoverable buses are recommended. For example, the same as above, but now uses a PCI bus on which an SCSI controller with block devices and network cards is placed (this time using a user space network). Transport is still virtio
qemu-system-aarch64 -m <memory size> -M virt -device virtio-scsi-pci -device scsi-hd,drive=hd0 -blockdev node-name=hd0,filename=<hard drive file name> -netdev user,id=unet -device virtio-net-pci,netdev=unet
Similar command lines can be used for qemu-system-arm as long as the kernel supports VIRTIO, GENERIC_PCI and SCSI_VIRTIO function.
6. Pictures
See original
7. Links
https://en.opensuse.org/openSUSE:AArch64#Using_an_emulator