QEMU

Differences between revisions 9 and 11 (spanning 2 versions)
Revision 9 as of 2015-08-21 18:54:53
Size: 1856
Editor: dannf
Comment:
Revision 11 as of 2015-12-22 21:07:29
Size: 1974
Editor: dannf
Comment:
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
 1. Install QEMU  1. Install QEMU and the EFI image for QEMU:
Line 9: Line 9:
 $ sudo apt-get install qemu-system-aarch64  $ sudo apt-get install qemu-system-arm qemu-efi
Line 11: Line 11:
 1. Get a tianocore UEFI image. Ubuntu provides one in the qemu-efi package.
Line 15: Line 14:
 $ dd if=QEMU_EFI.fd of=flash0.img conv=notrunc  $ dd if=/usr/share/qemu-efi/QEMU_EFI.fd of=flash0.img conv=notrunc
Line 23: Line 22:
  '''Note: For GICv3 systems, such as Cavium ThunderX, you must use QEMU from Ubuntu 16.04 or newer, and pass "-M virt,gic_version=3"'''.
Line 28: Line 28:

Ubuntu/arm64 can run inside the QEMU emulator. You can either do this fully emulated (e.g. on an x86 host) or, accelerated w/ KVM if you have an arm64 host. This page describes how to do both.

I've chosen to describe a UEFI-based system here so I can make use of the kernel on the guest's disk image. It is possible to boot directly into Linux instead.

Note: this requires Ubuntu 15.04 or greater

Getting the bits

  1. Install QEMU and the EFI image for QEMU:
     $ sudo apt-get install qemu-system-arm qemu-efi
  2. Now you'll need to create pflash volumes for UEFI. Two volumes are required, one static one for the UEFI firmware, and another dynamic one to store variables. Both need to be exactly 64M in size.
     $ dd if=/dev/zero of=flash0.img bs=1M count=64
     $ dd if=/usr/share/qemu-efi/QEMU_EFI.fd of=flash0.img conv=notrunc
     $ dd if=/dev/zero of=flash1.img bs=1M count=64
  3. Now you should be able to boot/ into a -arm64-uefi1.img type cloud image.

    1. For accelerated VMs (arm64 host w/ KVM support)
        $ sudo qemu-system-aarch64 -enable-kvm -m 1024 -cpu host -M virt -nographic -pflash flash0.img -pflash flash1.img -drive if=none,file=vivid-server-cloudimg-arm64-uefi1.img,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0,mac=$randmac

      Note: For GICv3 systems, such as Cavium ThunderX, you must use QEMU from Ubuntu 16.04 or newer, and pass "-M virt,gic_version=3".

    2. For emulated VMs (e.g. x86 host)
        $ sudo qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt -nographic -pflash flash0.img -pflash flash1.img -drive if=none,file=vivid-server-cloudimg-arm64-uefi1.img,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0,mac=$randmac

References

ARM64/QEMU (last edited 2024-04-18 09:13:56 by sally-makin)