| 
									
										
										
										
											2020-02-28 15:36:05 +00:00
										 |  |  | .. _ARM-System-emulator:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:16 +00:00
										 |  |  | Arm System emulator
 | 
					
						
							| 
									
										
										
										
											2020-02-28 15:36:05 +00:00
										 |  |  | -------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:16 +00:00
										 |  |  | QEMU can emulate both 32-bit and 64-bit Arm CPUs. Use the
 | 
					
						
							|  |  |  | ``qemu-system-aarch64`` executable to simulate a 64-bit Arm machine.
 | 
					
						
							|  |  |  | You can use either ``qemu-system-arm`` or ``qemu-system-aarch64``
 | 
					
						
							|  |  |  | to simulate a 32-bit Arm machine: in general, command lines that
 | 
					
						
							|  |  |  | work for ``qemu-system-arm`` will behave the same when used with
 | 
					
						
							|  |  |  | ``qemu-system-aarch64``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) QEMU also supports "M-profile" CPUs such as the Cortex-M0,
 | 
					
						
							|  |  |  | Cortex-M4 and Cortex-M33 (which are microcontrollers used in very
 | 
					
						
							|  |  |  | embedded boards). For most boards the CPU type is fixed (matching what
 | 
					
						
							|  |  |  | the hardware has), so typically you don't need to specify the CPU type
 | 
					
						
							|  |  |  | by hand, except for special cases like the ``virt`` board.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Choosing a board model
 | 
					
						
							|  |  |  | ======================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For QEMU's Arm system emulation, you must specify which board
 | 
					
						
							|  |  |  | model you want to use with the ``-M`` or ``--machine`` option;
 | 
					
						
							|  |  |  | there is no default.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you already have a system image or a kernel that works on hardware
 | 
					
						
							|  |  |  | and you want to boot with QEMU, check whether QEMU lists that machine
 | 
					
						
							|  |  |  | in its ``-machine help`` output. If it is listed, then you can probably
 | 
					
						
							|  |  |  | use that board model. If it is not listed, then unfortunately your image
 | 
					
						
							|  |  |  | will almost certainly not boot on QEMU. (You might be able to
 | 
					
						
							|  |  |  | extract the filesystem and use that with a different kernel which
 | 
					
						
							|  |  |  | boots on a system that QEMU does emulate.)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you don't care about reproducing the idiosyncrasies of a particular
 | 
					
						
							|  |  |  | bit of hardware, such as small amount of RAM, no PCI or other hard
 | 
					
						
							|  |  |  | disk, etc., and just want to run Linux, the best option is to use the
 | 
					
						
							|  |  |  | ``virt`` board. This is a platform which doesn't correspond to any
 | 
					
						
							|  |  |  | real hardware and is designed for use in virtual machines. You'll
 | 
					
						
							|  |  |  | need to compile Linux with a suitable configuration for running on
 | 
					
						
							|  |  |  | the ``virt`` board. ``virt`` supports PCI, virtio, recent CPUs and
 | 
					
						
							|  |  |  | large amounts of RAM. It also supports 64-bit CPUs.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Board-specific documentation
 | 
					
						
							|  |  |  | ============================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Unfortunately many of the Arm boards QEMU supports are currently
 | 
					
						
							|  |  |  | undocumented; you can get a complete list by running
 | 
					
						
							|  |  |  | ``qemu-system-aarch64 --machine help``.
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:15 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:16 +01:00
										 |  |  | ..
 | 
					
						
							|  |  |  |    This table of contents should be kept sorted alphabetically
 | 
					
						
							|  |  |  |    by the title text of each file, which isn't the same ordering
 | 
					
						
							|  |  |  |    as an alphabetical sort by filename.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:15 +00:00
										 |  |  | .. toctree::
 | 
					
						
							| 
									
										
										
										
											2020-03-11 23:18:54 +01:00
										 |  |  |    :maxdepth: 1
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:15 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    arm/integratorcp
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:18 +01:00
										 |  |  |    arm/mps2
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:19 +01:00
										 |  |  |    arm/musca
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:15 +00:00
										 |  |  |    arm/realview
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:16 +01:00
										 |  |  |    arm/versatile
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:17 +01:00
										 |  |  |    arm/vexpress
 | 
					
						
							| 
									
										
										
										
											2020-06-02 15:50:50 +02:00
										 |  |  |    arm/aspeed
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:15 +00:00
										 |  |  |    arm/musicpal
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:16 +01:00
										 |  |  |    arm/nseries
 | 
					
						
							| 
									
										
										
										
											2020-03-11 23:18:54 +01:00
										 |  |  |    arm/orangepi
 | 
					
						
							| 
									
										
										
										
											2020-05-07 16:18:16 +01:00
										 |  |  |    arm/palm
 | 
					
						
							|  |  |  |    arm/xscale
 | 
					
						
							|  |  |  |    arm/sx1
 | 
					
						
							|  |  |  |    arm/stellaris
 | 
					
						
							| 
									
										
										
										
											2020-03-09 21:58:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Arm CPU features
 | 
					
						
							|  |  |  | ================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. toctree::
 | 
					
						
							|  |  |  |    arm/cpu-features
 |