If you just want to download Ubuntu MATE images for the Raspberry Pi the go to the Ubuntu MATE website:
These "docs" are not comprehensive, but should be enough to get you started with building your own Ubuntu based images for the Raspberry Pi.
- Clone the Retro Home project
git clone https://github.com/wimpysworld/ubuntu-pi-image.git
It is best to run the ubuntu-pi-image
on an Ubuntu 22.04 x86 64-bit
workstation, ideally running in a VM via Quickemu.
If using a fresh Quickemu VM
you'll need to set the disk_size
parameter large enough to complete the build.
This can be achieved by adding disk_size="64G"
to ubuntu-mate-jammy.conf
before running quickemu
to create the VM. Alternatively you could mount
external storage into the container for the build area. You'll also need at
least to sudo apt install git
.
If you apt-get install apt-cache-ng
the ubuntu-pi-image
script will
automatically use the apt-cache-ng proxy to accelerate build performance.
You can tweak some variables towards the bottom of the ubuntu-pi-image
script.
FLAVOUR="ubuntu-mate"
IMG_QUALITY="-beta1"
IMG_VER="22.04"
IMG_RELEASE="jammy"
IMG_ARCH="arm64"
The following incantation will build a Ubuntu MATE 22.04 arm64 image for Raspberry Pi.
sudo ./ubuntu-pi-image
The script will create ~/Build
in your home directory that will include the
caches for each stages and the image for putting on your Raspberry Pi SD card,
USB stick or SSD.
Modify the stage_02_desktop
and stage_03_snap
accordingly to adapt the script
for other Ubuntu flavours/desktops.
This is the bootloader configuration from Ubuntu 22.04.
Remove these files:
meta-data
network-config
user-data
An overview of the files on the /boot/firmware partition (the 1st partition
on the SD card) used by the Ubuntu boot process (roughly in order) is as
follows:
* bootcode.bin - this is the second stage bootloader loaded by all pis with
the exception of the pi4 (where this is replaced by flash
memory)
* config.txt - the configuration file read by the boot process
* start*.elf - the third stage bootloader, which handles device-tree
modification and which loads...
* vmlinuz - the Linux kernel
* cmdline.txt - the Linux kernel command line
* initrd.img - the initramfs
* meta-data - meta-data for cloud-init; usually just contains the
instance id
* network-config - network configuration for cloud-init; edit this to set up
wifi access points and other networking settings
* user-data - user-data for cloud-init; edit this to configure initial
users, SSH keys, packages, etc.
From the armhf server image.
console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash
[all]
kernel=vmlinuz
cmdline=cmdline.txt
initramfs initrd.img followkernel
[pi4]
max_framebuffers=2
arm_boost=1
[all]
# Enable the audio output, I2C and SPI interfaces on the GPIO header. As these
# parameters related to the base device-tree they must appear *before* any
# other dtoverlay= specification
dtparam=audio=on
dtparam=i2c_arm=on
dtparam=spi=on
# Comment out the following line if the edges of the desktop appear outside
# the edges of your display
disable_overscan=1
# If you have issues with audio, you may try uncommenting the following line
# which forces the HDMI output into HDMI mode instead of DVI (which doesn't
# support audio output)
#hdmi_drive=2
# Enable the serial pins
enable_uart=1
# Autoload overlays for any recognized cameras or displays that are attached
# to the CSI/DSI ports. Please note this is for libcamera support, *not* for
# the legacy camera stack
camera_auto_detect=1
display_auto_detect=1
[cm4]
# Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into
# such a board)
dtoverlay=dwc2,dr_mode=host
[all]
From the arm64 server image.
console=serial0,115200 dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash
[all]
kernel=vmlinuz
cmdline=cmdline.txt
initramfs initrd.img followkernel
[pi4]
max_framebuffers=2
arm_boost=1
[all]
# Enable the audio output, I2C and SPI interfaces on the GPIO header. As these
# parameters related to the base device-tree they must appear *before* any
# other dtoverlay= specification
dtparam=audio=on
dtparam=i2c_arm=on
dtparam=spi=on
# Comment out the following line if the edges of the desktop appear outside
# the edges of your display
disable_overscan=1
# If you have issues with audio, you may try uncommenting the following line
# which forces the HDMI output into HDMI mode instead of DVI (which doesn't
# support audio output)
#hdmi_drive=2
# Enable the serial pins
enable_uart=1
# Autoload overlays for any recognized cameras or displays that are attached
# to the CSI/DSI ports. Please note this is for libcamera support, *not* for
# the legacy camera stack
camera_auto_detect=1
display_auto_detect=1
# Config settings specific to arm64
arm_64bit=1
dtoverlay=dwc2
[cm4]
# Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into
# such a board)
dtoverlay=dwc2,dr_mode=host
[all]
From Ubuntu proper desktop image.
zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=zstd dwc_otg.lpm_enable=0 console=tty1 root=LABEL=writable rootfstype=ext4 rootwait fixrtc quiet splash
[all]
kernel=vmlinuz
cmdline=cmdline.txt
initramfs initrd.img followkernel
[pi4]
max_framebuffers=2
arm_boost=1
[all]
# Enable the audio output, I2C and SPI interfaces on the GPIO header. As these
# parameters related to the base device-tree they must appear *before* any
# other dtoverlay= specification
dtparam=audio=on
dtparam=i2c_arm=on
dtparam=spi=on
# Comment out the following line if the edges of the desktop appear outside
# the edges of your display
disable_overscan=1
# If you have issues with audio, you may try uncommenting the following line
# which forces the HDMI output into HDMI mode instead of DVI (which doesn't
# support audio output)
#hdmi_drive=2
[cm4]
# Enable the USB2 outputs on the IO board (assuming your CM4 is plugged into
# such a board)
dtoverlay=dwc2,dr_mode=host
[all]
# Enable the KMS ("full" KMS) graphics overlay, leaving GPU memory as the
# default (the kernel is in control of graphics memory with full KMS)
dtoverlay=vc4-kms-v3d
# Autoload overlays for any recognized cameras or displays that are attached
# to the CSI/DSI ports. Please note this is for libcamera support, *not* for
# the legacy camera stack
camera_auto_detect=1
display_auto_detect=1
# Config settings specific to arm64
arm_64bit=1
dtoverlay=dwc2