| .. _RISC-V-System-emulator: | 
 |  | 
 | RISC-V System emulator | 
 | ====================== | 
 |  | 
 | QEMU can emulate both 32-bit and 64-bit RISC-V CPUs. Use the | 
 | ``qemu-system-riscv64`` executable to simulate a 64-bit RISC-V machine, | 
 | ``qemu-system-riscv32`` executable to simulate a 32-bit RISC-V machine. | 
 |  | 
 | QEMU has generally good support for RISC-V guests. It has support for | 
 | several different machines. The reason we support so many is that | 
 | RISC-V hardware is much more widely varying than x86 hardware. RISC-V | 
 | 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. | 
 |  | 
 | 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 RISC-V system emulation, you must specify which board | 
 | model you want to use with the ``-M`` or ``--machine`` option; | 
 | there is no default. | 
 |  | 
 | Because RISC-V 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 user space 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 file system 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 RISC-V boards QEMU supports are currently | 
 | undocumented; you can get a complete list by running | 
 | ``qemu-system-riscv64 --machine help``, or | 
 | ``qemu-system-riscv32 --machine help``. | 
 |  | 
 | .. | 
 |    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. | 
 |  | 
 | .. toctree:: | 
 |    :maxdepth: 1 | 
 |  | 
 |    riscv/microchip-icicle-kit | 
 |    riscv/shakti-c | 
 |    riscv/sifive_u | 
 |    riscv/virt | 
 |  | 
 | RISC-V CPU firmware | 
 | ------------------- | 
 |  | 
 | When using the ``sifive_u`` or ``virt`` machine there are three different | 
 | firmware boot options: | 
 |  | 
 | * ``-bios default`` | 
 |  | 
 | This is the default behaviour if no ``-bios`` option is included. This option | 
 | will load the default OpenSBI firmware automatically. The firmware is included | 
 | with the QEMU release and no user interaction is required. All a user needs to | 
 | do is specify the kernel they want to boot with the ``-kernel`` option | 
 |  | 
 | * ``-bios none`` | 
 |  | 
 | QEMU will not automatically load any firmware. It is up to the user to load all | 
 | the images they need. | 
 |  | 
 | * ``-bios <file>`` | 
 |  | 
 | Tells QEMU to load the specified file as the firmware. |