| Arm Versatile Express boards (``vexpress-a9``, ``vexpress-a15``) |
| ================================================================ |
| |
| QEMU models two variants of the Arm Versatile Express development |
| board family: |
| |
| - ``vexpress-a9`` models the combination of the Versatile Express |
| motherboard and the CoreTile Express A9x4 daughterboard |
| - ``vexpress-a15`` models the combination of the Versatile Express |
| motherboard and the CoreTile Express A15x2 daughterboard |
| |
| Note that as this hardware does not have PCI, IDE or SCSI, |
| the only available storage option is emulated SD card. |
| |
| Implemented devices: |
| |
| - PL041 audio |
| - PL181 SD controller |
| - PL050 keyboard and mouse |
| - PL011 UARTs |
| - SP804 timers |
| - I2C controller |
| - PL031 RTC |
| - PL111 LCD display controller |
| - Flash memory |
| - LAN9118 ethernet |
| |
| Unimplemented devices: |
| |
| - SP810 system control block |
| - PCI-express |
| - USB controller (Philips ISP1761) |
| - Local DAP ROM |
| - CoreSight interfaces |
| - PL301 AXI interconnect |
| - SCC |
| - System counter |
| - HDLCD controller (``vexpress-a15``) |
| - SP805 watchdog |
| - PL341 dynamic memory controller |
| - DMA330 DMA controller |
| - PL354 static memory controller |
| - BP147 TrustZone Protection Controller |
| - TrustZone Address Space Controller |
| |
| Other differences between the hardware and the QEMU model: |
| |
| - QEMU will default to creating one CPU unless you pass a different |
| ``-smp`` argument |
| - QEMU allows the amount of RAM provided to be specified with the |
| ``-m`` argument |
| - QEMU defaults to providing a CPU which does not provide either |
| TrustZone or the Virtualization Extensions: if you want these you |
| must enable them with ``-machine secure=on`` and ``-machine |
| virtualization=on`` |
| - QEMU provides 4 virtio-mmio virtio transports; these start at |
| address ``0x10013000`` for ``vexpress-a9`` and at ``0x1c130000`` for |
| ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is |
| provided on the command line then QEMU will edit it to include |
| suitable entries describing these transports for the guest. |
| |
| Booting a Linux kernel |
| ---------------------- |
| |
| Building a current Linux kernel with ``multi_v7_defconfig`` should be |
| enough to get something running. Nowadays an out-of-tree build is |
| recommended (and also useful if you build a lot of different targets). |
| In the following example $BLD points to the build directory and $SRC |
| points to the root of the Linux source tree. You can drop $SRC if you |
| are running from there. |
| |
| .. code-block:: bash |
| |
| $ make O=$BLD -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- multi_v7_defconfig |
| $ make O=$BLD -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- |
| |
| By default you will want to boot your rootfs off the sdcard interface. |
| Your rootfs will need to be padded to the right size. With a suitable |
| DTB you could also add devices to the virtio-mmio bus. |
| |
| .. code-block:: bash |
| |
| $ qemu-system-arm -cpu cortex-a15 -smp 4 -m 4096 \ |
| -machine type=vexpress-a15 -serial mon:stdio \ |
| -drive if=sd,driver=file,filename=armel-rootfs.ext4 \ |
| -kernel zImage \ |
| -dtb vexpress-v2p-ca15-tc1.dtb \ |
| -append "console=ttyAMA0 root=/dev/mmcblk0 ro" |