From Fedora Project Wiki
(Created page with "= Booting AArch64 using UEFI in a QEMU/KVM VM = == Setting up the host == Richard WM Jones has witten an excellent post on booting a [https://rwmj.wordpress.com/2015/02/27/h...")
 
 
(7 intermediate revisions by 2 users not shown)
Line 3: Line 3:
== Setting up the host ==
== Setting up the host ==


Richard WM Jones has witten an excellent post on booting a [https://rwmj.wordpress.com/2015/02/27/how-to-boot-a-fedora-21-aarch64-uefi-guest-on-x86_64/ Fedora 21 aarch64 UEFI guest on x86_64].  This can be reproduced on an F21 x86_64 host using existing packages, but as Richard mentioned, newer versions of some packages are required.  These can be pulled from the Fedora rawhide and [https://www.kraxel.org/repos/firmware.repo Gerd Hoffmann's firmware repos], as described below.
Richard WM Jones has written an excellent post on booting a [https://rwmj.wordpress.com/2015/02/27/how-to-boot-a-fedora-21-aarch64-uefi-guest-on-x86_64/ Fedora 21 aarch64 UEFI guest on x86_64].  This can be reproduced on an F21 x86_64 host using existing packages, but as Richard mentioned, newer versions of some packages are required.  Using an updated F22 host now provides all the necessary package versions.


First get virt-builder, in order to make an F21 image for QEMU (if not already installed):
First get virt-builder, in order to make an F22 AArch64 image for QEMU (if not already installed):


<pre>
<pre>
sudo yum -y install libguestfs-tools-c
$ sudo dnf -y install libguestfs-tools-c libvirt
</pre>
</pre>


You will need to get the rawhide version of QEMUSet up the rawhide repo (if not already done) and install QEMU:
The latest version of AAVMF should be installed to run an aarch64 image.  AAVMF is not in an official Fedora package yet, but  Gerd has provided an RPM package for installation convenienceDownload his repo definition and install his latest build of edk2:


<pre>
<pre>
sudo yum install fedora-repos-rawhide
(cd /etc/yum.repos.d; sudo curl -O https://www.kraxel.org/repos/firmware.repo )
sudo yum --enablerepo=rawhide update qemu-system-aarch64
sudo dnf -y install edk2.git-aarch64
</pre>
</pre>


You will also need to install AAVMF for running an aarch64 image. AAVMF is not in an official Fedora package yet, but  Gerd has provided an RPM package for installation convenience. Download his repo definition and install his latest build of edk2:
== Making the Image ==
 
{{admon/note | Note | There is a bug regarding fallback.efi [[https://bugzilla.redhat.com/show_bug.cgi?id=1190191 BZ#1190191]], so use a pre-built NVRAM file to work around it.}}


<pre>
<pre>
(cd /etc/yum.repos.d; sudo curl -O https://www.kraxel.org/repos/firmware.repo )
curl -O http://libguestfs.org/download/builder/fedora-22-aarch64-nvram.xz
sudo yum -y install edk2.git-aarch64
unxz fedora-22-aarch64-nvram.xz
</pre>
</pre>




{{admon/note | There's a bug regarding fallback.efi
{{admon/note | Note | By default, a randomly generated root password will be assigned. Make note of the root password in the virt-builder output, so you can log in later. Optionally, a root password may be set when building an image. In this example a password will be set.}}
    https://bugzilla.redhat.com/show_bug.cgi?id=1190191
so use a pre-built NVRAM file to work around it.}}
 
<pre>
curl -O http://libguestfs.org/download/builder/fedora-21-aarch64-nvram.xz
unxz fedora-21-aarch64-nvram.xz
</pre>


== Making the Image ==
{{admon/note | Note | In order to run virt-builder in F22, selinux must be set to Permissive or Disabled.}}


Use virt-builder to make an F21 image file:
Use virt-builder to make an F22 image file:


<pre>
<pre>
virt-builder --arch aarch64 fedora-21
virt-builder \
  --arch aarch64 \
  --root-password password:fedora \
    fedora-22
</pre>
</pre>
{{admon/note | Make note of the root password, so you can log in later.}}




Line 49: Line 45:


<pre>
<pre>
cat >> run-qemu.sh << EOF
cat > run-qemu.sh << EOF
#!/bin/bash
#!/bin/bash


sudo qemu-system-aarch64 \
VERSION=22
     -nodefconfig \
 
     -nodefaults \
qemu-system-aarch64 \\
     -display none \
     -nodefconfig \\
     -M virt -cpu cortex-a57 -machine accel=tcg \
     -nodefaults \\
    -m 2048 \
     -display none \\
     -drive if=pflash,format=raw,file=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw,readonly \
     -m 2048 \\
     -drive if=pflash,format=raw,file=fedora-21-aarch64-nvram \
    -cpu host -machine virt,accel=kvm \\
     -drive file=fedora-21.img,format=raw,if=none,id=hd0 \
     -drive if=pflash,format=raw,file=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw,readonly=on \\
    -device virtio-blk-device,drive=hd0 \
     -drive if=pflash,format=raw,file=fedora-\${VERSION}-aarch64-nvram \\
     -netdev user,id=usernet -device virtio-net-device,netdev=usernet \
    -device virtio-scsi-device,id=scsi \\
     -drive file=fedora-\${VERSION}.img,format=raw,if=none,id=hd0 -device scsi-hd,drive=hd0 \\
     -netdev user,id=usernet -device virtio-net-device,netdev=usernet \\
     -serial stdio
     -serial stdio
EOF
EOF
Line 77: Line 75:
</pre>
</pre>


This should boot grub2 and automatically boot the Fedora 21 kernel.
This should boot grub2 and automatically boot the Fedora 22 kernel.

Latest revision as of 19:39, 23 June 2015

Booting AArch64 using UEFI in a QEMU/KVM VM

Setting up the host

Richard WM Jones has written an excellent post on booting a Fedora 21 aarch64 UEFI guest on x86_64. This can be reproduced on an F21 x86_64 host using existing packages, but as Richard mentioned, newer versions of some packages are required. Using an updated F22 host now provides all the necessary package versions.

First get virt-builder, in order to make an F22 AArch64 image for QEMU (if not already installed):

$ sudo dnf -y install libguestfs-tools-c libvirt

The latest version of AAVMF should be installed to run an aarch64 image. AAVMF is not in an official Fedora package yet, but Gerd has provided an RPM package for installation convenience. Download his repo definition and install his latest build of edk2:

(cd /etc/yum.repos.d; sudo curl -O https://www.kraxel.org/repos/firmware.repo )
sudo dnf -y install edk2.git-aarch64

Making the Image

Note.png
Note
There is a bug regarding fallback.efi [BZ#1190191], so use a pre-built NVRAM file to work around it.
curl -O http://libguestfs.org/download/builder/fedora-22-aarch64-nvram.xz
unxz fedora-22-aarch64-nvram.xz


Note.png
Note
By default, a randomly generated root password will be assigned. Make note of the root password in the virt-builder output, so you can log in later. Optionally, a root password may be set when building an image. In this example a password will be set.
Note.png
Note
In order to run virt-builder in F22, selinux must be set to Permissive or Disabled.

Use virt-builder to make an F22 image file:

virt-builder \
  --arch aarch64 \
  --root-password password:fedora \
    fedora-22


A script may be set up to start the VM:

cat > run-qemu.sh << EOF
#!/bin/bash

VERSION=22

qemu-system-aarch64 \\
    -nodefconfig \\
    -nodefaults \\
    -display none \\
    -m 2048 \\
    -cpu host -machine virt,accel=kvm \\
    -drive if=pflash,format=raw,file=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw,readonly=on \\
    -drive if=pflash,format=raw,file=fedora-\${VERSION}-aarch64-nvram \\
    -device virtio-scsi-device,id=scsi \\
    -drive file=fedora-\${VERSION}.img,format=raw,if=none,id=hd0 -device scsi-hd,drive=hd0 \\
    -netdev user,id=usernet -device virtio-net-device,netdev=usernet \\
    -serial stdio
EOF

chmod +x run-qemu.sh

Booting the image

Run the script (or the command it contains) to boot the VM.

./run-qemu.sh

This should boot grub2 and automatically boot the Fedora 22 kernel.