Adapting Ubuntu MATE 16.04 image to run on the 3B+/3A+

This tutorial assumes that you have a 2B or older 3B running Ubuntu MATE. This tutorial instructs you on how to update the bootloader, kernel, and install WiFi firmware, and then you can use the microSD card containing your UM installation on the 3B+/3A+.

First of all, let’s take a look at why exactly Ubuntu MATE does not boot on the 3B+ and 3A+. The Pi 3B and Pi 2B v1.2 use the first revision of the BCM2837 SoC, known as the BCM2837A0. The Pi 3B+ and 3A+ use the second revision of the BCM2837 SoC known as the BCM2837B0. This revision isn’t too different to the first revision other than the fact that it supports PoE (Power over Ethernet) and is clocked at 1.4GHz by default. For Pi models that use the BCM2837B0 to boot, the bootloader (bootcode.bin, *.elf, *.dat) needs to support this SoC. Unfortunately, Ubuntu MATE comes with an old version of the bootloader incompatible with the BCM2837B0. This is why you won’t get past the rainbow screen if you try to boot Ubuntu MATE on the 3B+ or 3A+.

So, update the bootloader to the latest version compatible with the 3B+ and 3A+. Insert your microSD card containing Ubuntu MATE into your 3B or 2B and power it up.

Now, bring the system up to date by running the following commands:

sudo apt update
sudo apt upgrade -y

Install the latest Raspberry Pi bootloader:

wget https://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-bootloader_1.20181112-1_armhf.deb
mkdir /tmp/pi-bootloader
sudo dpkg-deb -x raspberrypi-bootloader_1.20181112-1_armhf.deb /tmp/pi-bootloader
sudo cp /tmp/pi-bootloader/boot/* /boot/

Next, you must use rpi-update to update the kernel. By default, rpi-update downloads the very latest kernel available which may be unstable. However, it can be forced to download the latest stable kernel by running:

sudo BRANCH=stable rpi-update

Once the kernel has been updated, do not shutdown the Pi yet. You must install additional WiFi firmware files to get WiFi working on the 3B+ and 3A+. Do so by running:

mkdir wifi-firmware && cd wifi-firmware
wget https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm/brcmfmac43455-sdio.bin
wget https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm/brcmfmac43455-sdio.clm_blob 
wget https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm/brcmfmac43455-sdio.txt 
sudo cp *sdio* /lib/firmware/brcm/

Now, you may shutdown your system, move the microSD card from the 2B or 3B to the 3B+ or 3A+, and power on! The Pi should boot. Enjoy using Ubuntu MATE on your 3B+ or 3A+!

2 Likes

I wonder if my instructions for getting Mate 18.04 to run on the 3B+ will also function for the 3A+. If anyone tries it, please let me know so I can update my How-To.

Thanks!