How to enable support for Raspberry Pi 3B+ and 3A+ in Ubuntu MATE

These instructions also apply to the Lubuntu and Xubuntu images available on the Ubuntu Pi Flavour Maker website, as well as any other 32-bit distro for the Raspberry Pi.

People have been reporting that Ubuntu MATE has not been booting on the Pi 3B+ but boots perfectly on older Pi models. This is because Ubuntu MATE and some other distros uses old bootloader files which are incompatible with the Pi 3B+ and 3A+. You can easily update the bootloader files to the latest available versions using rpi-update, but this downloads the very latest bootloader files which may be unstable.

You can install the latest stable bootloader directly on your desired OS on a supported Pi model (such as the Pi 2) or on another PC.

Updating bootloader files directly on a Pi running desired OS

Updating the bootloader directly on another Pi running your desired OS is very easy. Simply run:

wget http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-bootloader_1.20181112-1_armhf.deb
sudo dpkg -i raspberrypi-bootloader_1.20181112-1_armhf.deb

After that, you’ll need to add some WiFi firmware files so that the built-in WiFi works:

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/

Then shutdown the Pi, take out the microSD card, and insert it into your Pi 3B+ or 3A+, and then power it on. Your desired OS should start booting up.

Updating bootloader files on another PC

Updating the bootloader files on another PC is harder than updating them directly on the Pi. You’ll need to be running a Linux distro to be able to do this. This tutorial assumes that you are using either Ubuntu or Debian.

First of all, install QEMU User Emulation support packages so that you can chroot into Linux filesystems designed for different architectures:

sudo apt install qemu-user-static binfmt-support

Find out the block name device of your microSD card by running sudo fdisk -l and looking for a device that describes your microSD card. For example, if you have an 8GB microSD, a 7.9GB device is likely your microSD card.

Once you’ve found out the device name of your microSD, mount it to /mnt. For example, if your microSD’s device name was /dev/mmcblk0, run:

sudo mount /dev/mmcblk0p2 /mnt
sudo mount /dev/mmcblk0p1 /mnt/boot

After that, copy over your PC’s resolv.conf file (required for internet access which you will need):

sudo cp /etc/resolv.conf /mnt/etc/resolv.conf

Now, mount proc and dev directories:

sudo mount -o bind /proc /mnt/proc
sudo mount -o bind /dev /mnt/dev
sudo mount -o bind /dev/pts /mnt/dev/pts

Then chroot in!

sudo chroot /mnt

Update the bootloader files:

wget http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-bootloader_1.20181112-1_armhf.deb
sudo dpkg -i raspberrypi-bootloader_1.20181112-1_armhf.deb

Add WiFi firmware files:

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/

If you get an operation not permitted error when trying to update the bootloader, then run the following commands outside of the chroot:

git clone https://github.com/raspberrypi/firmware.git
sudo cp -r firmware/boot/* /mnt/boot/

Once cp has finished copying the bootloader files, add the WiFi firmware by chrooting into the filesystem and following the instructions to add WiFi files.

Exit your microSD card’s root filesystem by entering ‘exit’ in the bash prompt. Then unmount dev, proc, and your microSD card:

sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/boot
sudo umount /mnt

Put the microSD card into your Pi 3B+ or 3A+ and turn it on. If all’s gone well, your desired OS should load successfully.

1 Like

Looks very similar to my own instruction, but a bit simpler :slight_smile:

Didn’t even see your instructions, sorry about that. The differences is that in my tutorial, I used the latest stable bootloader (which includes support for both the Pi 3B+ and 3A+) instead of just running rpi-update. rpi-update upgrades the bootloader files on your system to the very latest available versions, which could be unstable. Also, I believe that you need three files to get WiFi working, not just one. Also, I provided a method if you wanted to enable support directly on another Pi, you can do so. But still, your tutorial was good.

Hi code_exec and thanks for making headway in establishing a path to installing Ubuntu Mate 16.04 on the RPi 3 A+ and B+.
I managed to borrow an RPi 3 as the work engine and followed your procedure. After swapping to the B+ the bootloader was successful, but the WiFi didn’t work. Also just after the rainbow square and four raspberries the following texts showed on the screen.
(In yellow) [FAILED] Failed to start Load Kernel Modules.
See ‘systemtl status systemd-modules-load.service’ for details.
There follwed a list of activities on 18 lines 11 of which were preceded by [ OK ] in green until the final line Starting Show Plymouth Boot Screen…

I swapped the SD card back into the RPi 3 and although it booted and the WiFi worked, the same list of issues arose, beginning with the [FAILED]

Any suggestions please?

I believe that the WiFi not working is because of a missing dtb file for the Pi 3B+. I know where to download a dtb file for the Pi 3B, but can’t find one for the 3B+.

Thanks for your thoughts and effort. Would I find the dtb file on my Raspbian SD card?

Yes you would. It’s found on the FAT32 boot partition.
Do NOT copy kernel7.img across – it will break keyboard and mouse functionality because Ubuntu MATE’s kernel modules are outdated.

I’ve located bcm-2710-rpi-3-b-plus.dtb where you said. I’ll try it soon and let you know how I get on.

Well I tried copying the file using windows explorer on my PC from one micro SD card to the other. It appeared to be copied across, but the card did not boot at all (stuck at spectrum square screen). I’m now searching for more knowledge of how to do this copying. Perhaps from a USB drive plugged directly into the RPi?

A few questions:

  1. If you remove the dtb from the boot partition, does it boot past the rainbow screen?
  2. Did Windows ask you to format any drives when you were copying over the dtb? Did you format them?
  3. Does your Raspbian microSD card still work?
  1. Yes - back to the same situation of working but no WiFi
  2. Yes but No - I was asked to format drives but studiously avoided doing so
  3. Yes - seemingly as normal.

I am researching how to copy the .dtb file across without relying on W10 Explorer with which I am much more fluent than Raspian or Ubuntu.

GOOD NEWS - I’ve got Ubuntu MATE 16.04 working on my RPi3B+ !!!
The important difference with the process listed above by code_exec was just in the first step. Instead of updating the bootloader files after placing the microSD card containing the Ubuntu MATE 16.04 image in my friends RPi3B (i.e. not the + model), I simply ran rpi-update. After that the SD card would now boot up beyond the spectrum square splash screen in the RPi3B+ to the Ubuntu MATE desktop. WiFi doesn’t yet work so back into the RPi3B (where WiFi works) and downloaded the WiFi firmware files as suggested by code_exec and copied them over into the correct folder. Then back to the RPi3B+ and the Wifi is now up and running!

Be aware that rpi-update downloads the very latest available firmware which may be unstable. Run sudo BRANCH=stable rpi-update to install the latest stable firmware.

3 Likes