How to run Ubuntu 16.04 ARM in QEMU?

6,371

Solution 1

This will not work because the Image you are using is pre-compiled for Raspberry Pi 2 device and will work only on Raspberry Pi 2. Try this tutorial

Solution 2

In this answer: Is there any prebuilt QEMU Ubuntu image(32bit) online? I have described the following working setups for Ubuntu 18.04 guest / host:

  • cloud image arm64: quickest setup to get started
  • debootstrap arm64: reasonably quick, but allows for more image customization

Those setups provide prebuilt disk images, and don't go through the installer. They are the best choices that I've seen so far.

Next, I've also managed to run the arm64 server image on QEMU. However, this goes through the installer, which is borderline impractically slow to do, unless you are not on an ARM host with KVM. This is specially painful because dozens of interactions are required to finish installation.

Here is the server script, tested on an Ubuntu 18.10 host:

#!/usr/bin/env bash

set -eux

# Tested on Ubuntu 18.10.
# - https://superuser.com/questions/942657/how-to-test-arm-ubuntu-under-qemu-the-easiest-way
# - https://askubuntu.com/questions/797599/how-to-run-ubuntu-16-04-arm-in-qemu

# Parameters.
id=ubuntu-18.04.1-server-arm64
#id=debian-9.6.0-arm64-xfce-CD-1
img="${id}.img.qcow2"
img_snapshot="${id}.img.snapshot.qcow2"
iso="${id}.iso"
flash0="${id}-flash0.img"
flash1="${id}-flash1.img"

# Images.
if [ ! -f "$iso" ]; then
  wget "http://cdimage.ubuntu.com/releases/18.04/release/${iso}"
fi
if [ ! -f "$img" ]; then
  qemu-img create -f qcow2 "$img" 1T
fi
if [ ! -f "$img_snapshot" ]; then
  qemu-img \
    create \
    -b "$img" \
    -f qcow2 \
    "$img_snapshot" \
  ;
fi
if [ ! -f "$flash0" ]; then
  dd if=/dev/zero of="$flash0" bs=1M count=64
  dd if=/usr/share/qemu-efi/QEMU_EFI.fd of="$flash0" conv=notrunc
fi
if [ ! -f "$flash1" ]; then
  dd if=/dev/zero of="$flash1" bs=1M count=64
fi

# Run.
#
# cdrom must be scsi or else the installation fails midway with:
#
# > Detect and mount CD-ROM
# >
# > Your installation CD-ROM couldn't be mounted. This probably means
# > that the CD-ROM was not in the drive. If so you can insert it and try
# > again.
# >
# > Retry mounting the CD-ROM?
# > Your installation CD-ROM couldn't be mounted.
#
# This is because the drivers for the default virtio are not installed in the ISO,
# because in the past it was not reliable on qemu-system-aarch64.
#
# See also:
# https://bazaar.launchpad.net/~ubuntu-testcase/ubuntu-manual-tests/trunk/view/head:/testcases/image/1688_ARM64_Headless_KVM_Guest
qemu-system-aarch64 \
  -cpu cortex-a57 \
  -device rtl8139,netdev=net0 \
  -device virtio-scsi-device \
  -device scsi-cd,drive=cdrom \
  -device virtio-blk-device,drive=hd0 \
  -drive "file=${iso},id=cdrom,if=none,media=cdrom" \
  -drive "if=none,file=${img_snapshot},id=hd0" \
  -m 2G \
  -machine virt \
  -netdev user,id=net0 \
  -nographic \
  -pflash "$flash0" \
  -pflash "$flash1" \
  -smp 2 \
;

GitHub upstream.

See also this for Raspberry Pi emulation: https://stackoverflow.com/questions/28880833/how-to-emulate-the-raspberry-pi-2-on-qemu/45814913#45814913

amd64 desktop shown at: How to run Ubuntu 16.04 Desktop on QEMU?

Share:
6,371

Related videos on Youtube

lepe
Author by

lepe

I work as a server administrator / developer in Japan. I also assist some companies to strengthen their network security as freelancer.

Updated on September 18, 2022

Comments

  • lepe
    lepe almost 2 years

    My goal is to run Ubuntu 16.04 (ARM) in Qemu (on Ubuntu 16.04 x64 host).

    I tried to follow this -old- tutorial without success:

    Home directory not accessible: Permission denied
    pulseaudio: pa_context_connect() failed
    pulseaudio: Reason: Connection refused
    pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver
    Could not initialize SDL(No available video device) - exiting
    

    Instead of the debian_squeeze_armel_standard.qcow2 image used there, I used ubuntu-16.04-preinstalled-server-armhf+raspi2.img.

    Forgetting about the above-mentioned article, which is the correct way to run Ubuntu 16.04-arm on top of Qemu?

    If it is not possible to run it over Qemu easily, is there any other alternative?

  • lepe
    lepe over 6 years
    Thank you. I will try it later. I think that will answer my question.