Home | History | Annotate | Download | only in doc
      1 # SPDX-License-Identifier: GPL-2.0+
      2 #
      3 # Copyright (C) 2017, Tuomas Tynkkynen <tuomas.tynkkynen (a] iki.fi>
      4 
      5 U-Boot on QEMU's 'virt' machine on ARM & AArch64
      6 ================================================
      7 
      8 QEMU for ARM supports a special 'virt' machine designed for emulation and
      9 virtualization purposes. This document describes how to run U-Boot under it.
     10 Both 32-bit ARM and AArch64 are supported.
     11 
     12 The 'virt' platform provides the following as the basic functionality:
     13 
     14     - A freely configurable amount of CPU cores
     15     - U-Boot loaded and executing in the emulated flash at address 0x0
     16     - A generated device tree blob placed at the start of RAM
     17     - A freely configurable amount of RAM, described by the DTB
     18     - A PL011 serial port, discoverable via the DTB
     19     - An ARMv7/ARMv8 architected timer
     20     - PSCI for rebooting the system
     21     - A generic ECAM-based PCI host controller, discoverable via the DTB
     22 
     23 Additionally, a number of optional peripherals can be added to the PCI bus.
     24 
     25 Building U-Boot
     26 ---------------
     27 Set the CROSS_COMPILE environment variable as usual, and run:
     28 
     29 - For ARM:
     30     make qemu_arm_defconfig
     31     make
     32 
     33 - For AArch64:
     34     make qemu_arm64_defconfig
     35     make
     36 
     37 Running U-Boot
     38 --------------
     39 The minimal QEMU command line to get U-Boot up and running is:
     40 
     41 - For ARM:
     42     qemu-system-arm -machine virt -bios u-boot.bin
     43 
     44 - For AArch64:
     45     qemu-system-aarch64 -machine virt -cpu cortex-a57 -bios u-boot.bin
     46 
     47 Note that for some odd reason qemu-system-aarch64 needs to be explicitly
     48 told to use a 64-bit CPU or it will boot in 32-bit mode.
     49 
     50 Additional peripherals that have been tested to work in both U-Boot and Linux
     51 can be enabled with the following command line parameters:
     52 
     53 - To add a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.:
     54     -drive if=none,file=disk.img,id=mydisk -device ich9-ahci,id=ahci -device ide-drive,drive=mydisk,bus=ahci.0
     55 - To add an Intel E1000 network adapter, pass e.g.:
     56     -netdev user,id=net0 -device e1000,netdev=net0
     57 - To add an EHCI-compliant USB host controller, pass e.g.:
     58     -device usb-ehci,id=ehci
     59 - To add a NVMe disk, pass e.g.:
     60     -drive if=none,file=disk.img,id=mydisk -device nvme,drive=mydisk,serial=foo
     61 
     62 These have been tested in QEMU 2.9.0 but should work in at least 2.5.0 as well.
     63