Arm Versatile boards (
The Arm Versatile baseboard is emulated with the following devices:
ARM926E, ARM1136 or Cortex-A8 CPU
PL190 Vectored Interrupt Controller
Four PL011 UARTs
SMC 91c111 Ethernet adapter
PL110 LCD controller
PL050 KMI with PS/2 keyboard and mouse.
PCI host bridge. Note the emulated PCI bridge only provides access to PCI memory space. It does not provide access to PCI IO space. This means some devices (eg. ne2k_pci NIC) are not usable, and others (eg. rtl8139 NIC) are only usable when the guest drivers use the memory mapped control registers.
PCI OHCI USB controller.
LSI53C895A PCI SCSI Host Bus Adapter with hard disk and CD-ROM devices.
PL181 MultiMedia Card Interface with SD card.
Booting a Linux kernel
Building a current Linux kernel with
versatile_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.
$ make O=$BLD -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- versatile_defconfig $ make O=$BLD -C $SRC ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
You may want to enable some additional modules if you want to boot something from the SCSI interface:
CONFIG_PCI=y CONFIG_PCI_VERSATILE=y CONFIG_SCSI=y CONFIG_SCSI_SYM53C8XX_2=y
You can then boot with a command line like:
$ qemu-system-arm -machine type=versatilepb \ -serial mon:stdio \ -drive if=scsi,driver=file,filename=debian-buster-armel-rootfs.ext4 \ -kernel zImage \ -dtb versatile-pb.dtb \ -append "console=ttyAMA0 ro root=/dev/sda"