1.. _ARM-System-emulator: 2 3Arm System emulator 4------------------- 5 6QEMU can emulate both 32-bit and 64-bit Arm CPUs. Use the 7``qemu-system-aarch64`` executable to simulate a 64-bit Arm machine. 8You can use either ``qemu-system-arm`` or ``qemu-system-aarch64`` 9to simulate a 32-bit Arm machine: in general, command lines that 10work for ``qemu-system-arm`` will behave the same when used with 11``qemu-system-aarch64``. 12 13QEMU has generally good support for Arm guests. It has support for 14nearly fifty different machines. The reason we support so many is that 15Arm hardware is much more widely varying than x86 hardware. Arm CPUs 16are generally built into "system-on-chip" (SoC) designs created by 17many different companies with different devices, and these SoCs are 18then built into machines which can vary still further even if they use 19the same SoC. Even with fifty boards QEMU does not cover more than a 20small fraction of the Arm hardware ecosystem. 21 22The situation for 64-bit Arm is fairly similar, except that we don't 23implement so many different machines. 24 25As well as the more common "A-profile" CPUs (which have MMUs and will 26run Linux) QEMU also supports "M-profile" CPUs such as the Cortex-M0, 27Cortex-M4 and Cortex-M33 (which are microcontrollers used in very 28embedded boards). For most boards the CPU type is fixed (matching what 29the hardware has), so typically you don't need to specify the CPU type 30by hand, except for special cases like the ``virt`` board. 31 32Choosing a board model 33====================== 34 35For QEMU's Arm system emulation, you must specify which board 36model you want to use with the ``-M`` or ``--machine`` option; 37there is no default. 38 39Because Arm systems differ so much and in fundamental ways, typically 40operating system or firmware images intended to run on one machine 41will not run at all on any other. This is often surprising for new 42users who are used to the x86 world where every system looks like a 43standard PC. (Once the kernel has booted, most userspace software 44cares much less about the detail of the hardware.) 45 46If you already have a system image or a kernel that works on hardware 47and you want to boot with QEMU, check whether QEMU lists that machine 48in its ``-machine help`` output. If it is listed, then you can probably 49use that board model. If it is not listed, then unfortunately your image 50will almost certainly not boot on QEMU. (You might be able to 51extract the filesystem and use that with a different kernel which 52boots on a system that QEMU does emulate.) 53 54If you don't care about reproducing the idiosyncrasies of a particular 55bit of hardware, such as small amount of RAM, no PCI or other hard 56disk, etc., and just want to run Linux, the best option is to use the 57``virt`` board. This is a platform which doesn't correspond to any 58real hardware and is designed for use in virtual machines. You'll 59need to compile Linux with a suitable configuration for running on 60the ``virt`` board. ``virt`` supports PCI, virtio, recent CPUs and 61large amounts of RAM. It also supports 64-bit CPUs. 62 63Board-specific documentation 64============================ 65 66Unfortunately many of the Arm boards QEMU supports are currently 67undocumented; you can get a complete list by running 68``qemu-system-aarch64 --machine help``. 69 70.. 71 This table of contents should be kept sorted alphabetically 72 by the title text of each file, which isn't the same ordering 73 as an alphabetical sort by filename. 74 75.. toctree:: 76 :maxdepth: 1 77 78 arm/integratorcp 79 arm/mps2 80 arm/musca 81 arm/realview 82 arm/sbsa 83 arm/versatile 84 arm/vexpress 85 arm/aspeed 86 arm/bananapi_m2u.rst 87 arm/b-l475e-iot01a.rst 88 arm/sabrelite 89 arm/highbank 90 arm/digic 91 arm/cubieboard 92 arm/emcraft-sf2 93 arm/musicpal 94 arm/gumstix 95 arm/mainstone 96 arm/kzm 97 arm/nseries 98 arm/nrf 99 arm/nuvoton 100 arm/imx25-pdk 101 arm/orangepi 102 arm/palm 103 arm/raspi 104 arm/xscale 105 arm/collie 106 arm/sx1 107 arm/stellaris 108 arm/stm32 109 arm/virt 110 arm/xenpvh 111 arm/xlnx-versal-virt 112 arm/xlnx-zynq 113 114Emulated CPU architecture support 115================================= 116 117.. toctree:: 118 arm/emulation 119 120Arm CPU features 121================ 122 123.. toctree:: 124 arm/cpu-features 125