xref: /qemu/docs/system/target-arm.rst (revision 41581f13)
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