1324b2298SPaolo Bonzini.. _ARM-System-emulator: 2324b2298SPaolo Bonzini 3d3149c59SPeter MaydellArm System emulator 4324b2298SPaolo Bonzini------------------- 5324b2298SPaolo Bonzini 6d3149c59SPeter MaydellQEMU can emulate both 32-bit and 64-bit Arm CPUs. Use the 7d3149c59SPeter Maydell``qemu-system-aarch64`` executable to simulate a 64-bit Arm machine. 8d3149c59SPeter MaydellYou can use either ``qemu-system-arm`` or ``qemu-system-aarch64`` 9d3149c59SPeter Maydellto simulate a 32-bit Arm machine: in general, command lines that 10d3149c59SPeter Maydellwork for ``qemu-system-arm`` will behave the same when used with 11d3149c59SPeter Maydell``qemu-system-aarch64``. 12d3149c59SPeter Maydell 13d3149c59SPeter MaydellQEMU has generally good support for Arm guests. It has support for 14d3149c59SPeter Maydellnearly fifty different machines. The reason we support so many is that 15d3149c59SPeter MaydellArm hardware is much more widely varying than x86 hardware. Arm CPUs 16d3149c59SPeter Maydellare generally built into "system-on-chip" (SoC) designs created by 17d3149c59SPeter Maydellmany different companies with different devices, and these SoCs are 18d3149c59SPeter Maydellthen built into machines which can vary still further even if they use 19d3149c59SPeter Maydellthe same SoC. Even with fifty boards QEMU does not cover more than a 20d3149c59SPeter Maydellsmall fraction of the Arm hardware ecosystem. 21d3149c59SPeter Maydell 22d3149c59SPeter MaydellThe situation for 64-bit Arm is fairly similar, except that we don't 23d3149c59SPeter Maydellimplement so many different machines. 24d3149c59SPeter Maydell 25d3149c59SPeter MaydellAs well as the more common "A-profile" CPUs (which have MMUs and will 26d3149c59SPeter Maydellrun Linux) QEMU also supports "M-profile" CPUs such as the Cortex-M0, 27d3149c59SPeter MaydellCortex-M4 and Cortex-M33 (which are microcontrollers used in very 28d3149c59SPeter Maydellembedded boards). For most boards the CPU type is fixed (matching what 29d3149c59SPeter Maydellthe hardware has), so typically you don't need to specify the CPU type 30d3149c59SPeter Maydellby hand, except for special cases like the ``virt`` board. 31d3149c59SPeter Maydell 32d3149c59SPeter MaydellChoosing a board model 33d3149c59SPeter Maydell====================== 34d3149c59SPeter Maydell 35d3149c59SPeter MaydellFor QEMU's Arm system emulation, you must specify which board 36d3149c59SPeter Maydellmodel you want to use with the ``-M`` or ``--machine`` option; 37d3149c59SPeter Maydellthere is no default. 38d3149c59SPeter Maydell 39d3149c59SPeter MaydellBecause Arm systems differ so much and in fundamental ways, typically 40d3149c59SPeter Maydelloperating system or firmware images intended to run on one machine 41d3149c59SPeter Maydellwill not run at all on any other. This is often surprising for new 42d3149c59SPeter Maydellusers who are used to the x86 world where every system looks like a 43d3149c59SPeter Maydellstandard PC. (Once the kernel has booted, most userspace software 44d3149c59SPeter Maydellcares much less about the detail of the hardware.) 45d3149c59SPeter Maydell 46d3149c59SPeter MaydellIf you already have a system image or a kernel that works on hardware 47d3149c59SPeter Maydelland you want to boot with QEMU, check whether QEMU lists that machine 48d3149c59SPeter Maydellin its ``-machine help`` output. If it is listed, then you can probably 49d3149c59SPeter Maydelluse that board model. If it is not listed, then unfortunately your image 50d3149c59SPeter Maydellwill almost certainly not boot on QEMU. (You might be able to 51d3149c59SPeter Maydellextract the filesystem and use that with a different kernel which 52d3149c59SPeter Maydellboots on a system that QEMU does emulate.) 53d3149c59SPeter Maydell 54d3149c59SPeter MaydellIf you don't care about reproducing the idiosyncrasies of a particular 55d3149c59SPeter Maydellbit of hardware, such as small amount of RAM, no PCI or other hard 56d3149c59SPeter Maydelldisk, etc., and just want to run Linux, the best option is to use the 57d3149c59SPeter Maydell``virt`` board. This is a platform which doesn't correspond to any 58d3149c59SPeter Maydellreal hardware and is designed for use in virtual machines. You'll 59d3149c59SPeter Maydellneed to compile Linux with a suitable configuration for running on 60d3149c59SPeter Maydellthe ``virt`` board. ``virt`` supports PCI, virtio, recent CPUs and 61d3149c59SPeter Maydelllarge amounts of RAM. It also supports 64-bit CPUs. 62d3149c59SPeter Maydell 63d3149c59SPeter MaydellBoard-specific documentation 64d3149c59SPeter Maydell============================ 65d3149c59SPeter Maydell 66d3149c59SPeter MaydellUnfortunately many of the Arm boards QEMU supports are currently 67d3149c59SPeter Maydellundocumented; you can get a complete list by running 68d3149c59SPeter Maydell``qemu-system-aarch64 --machine help``. 69324b2298SPaolo Bonzini 70b6e50ad0SPeter Maydell.. 71b6e50ad0SPeter Maydell This table of contents should be kept sorted alphabetically 72b6e50ad0SPeter Maydell by the title text of each file, which isn't the same ordering 73b6e50ad0SPeter Maydell as an alphabetical sort by filename. 74b6e50ad0SPeter Maydell 75c11a8e89SPeter Maydell.. toctree:: 760553ef42SNiek Linnenbank :maxdepth: 1 77324b2298SPaolo Bonzini 78c11a8e89SPeter Maydell arm/integratorcp 79ba7912a5SPeter Maydell arm/mps2 809f8f640eSPeter Maydell arm/musca 81c11a8e89SPeter Maydell arm/realview 820339c2a8SAlex Bennée arm/sbsa 83b6e50ad0SPeter Maydell arm/versatile 845a1d4244SPeter Maydell arm/vexpress 857a1e049aSCédric Le Goater arm/aspeed 868d7f954aSqianfan Zhao arm/bananapi_m2u.rst 8741581f13SInès Varhol arm/b-l475e-iot01a.rst 88c9f8511eSBin Meng arm/sabrelite 892d21dd17SPeter Maydell arm/digic 90d4a7c362SPeter Maydell arm/cubieboard 913f65df38SPeter Maydell arm/emcraft-sf2 92c90df7ceSPeter Maydell arm/highbank 93c11a8e89SPeter Maydell arm/musicpal 94bb309000SPeter Maydell arm/gumstix 95c9543db4SPeter Maydell arm/mainstone 96fa6c9394SPeter Maydell arm/kzm 9790a76c63SAlexandre Iooss arm/nrf 98b6e50ad0SPeter Maydell arm/nseries 9982c703feSHavard Skinnemoen arm/nuvoton 100b1b3e3e3SPeter Maydell arm/imx25-pdk 1010553ef42SNiek Linnenbank arm/orangepi 102b6e50ad0SPeter Maydell arm/palm 103d9f2ac3dSPhilippe Mathieu-Daudé arm/raspi 104b6e50ad0SPeter Maydell arm/xscale 105b76b60f5SPeter Maydell arm/collie 106b6e50ad0SPeter Maydell arm/sx1 107b6e50ad0SPeter Maydell arm/stellaris 1081af060e5SAlexandre Iooss arm/stm32 1096a0b7505SPeter Maydell arm/virt 110ff9e157bSEdgar E. Iglesias arm/xlnx-versal-virt 111733766cdSVikram Garhwal arm/xenpvh 11234f18ab1SPeter Maydell 113741292faSPeter MaydellEmulated CPU architecture support 114741292faSPeter Maydell================================= 115741292faSPeter Maydell 116741292faSPeter Maydell.. toctree:: 117741292faSPeter Maydell arm/emulation 118741292faSPeter Maydell 11934f18ab1SPeter MaydellArm CPU features 12034f18ab1SPeter Maydell================ 12134f18ab1SPeter Maydell 12234f18ab1SPeter Maydell.. toctree:: 12334f18ab1SPeter Maydell arm/cpu-features 124