Arch Linux on Raspberry Pi 5
If you already have Raspberry Pi OS running on an SD card and you want to switch to Arch Linux ARM booting from an NVMe drive with the linux-rpi-16k kernel, this post is for you.
Activate NVMe
Run lsblk. Does it show the NVMe device /dev/nvme0n1? If not, we need to append this to /boot/firmware/config.txt at the end:
dtparam=nvme
dtparam=pciex1_gen=3Changes in config.txt need to be followed up by a reboot to see the changes.
Wipe the NVMe SSD
Make sure you don't have any important data remaining on your SSD.
sudo umount /dev/nvme0n1p?
sudo wipefs --all --force /dev/nvme0n1p?
sudo wipefs --all --force /dev/nvme0n1
sudo dd if=/dev/zero of=/dev/nvme0n1 bs=1024 count=1Clone the boot volume to your NVMe SSD
git clone https://github.com/geerlingguy/rpi-clone.git
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
sudo rpi-clone nvme0n1You could now boot from your NVMe SSD if all you need is Raspberry Pi OS. This is a good timing to check if your NVMe drive works at all. Otherwise, continue to download Arch Linux ARM.
Clear both partitions
sudo mount /dev/nvme0n1p2 --mkdir /nvme
sudo rm -rf /nvme/*
sudo mount /dev/nvme0n1p1 --mkdir /nvme/boot
sudo rm -rf /nvme/boot/*Install Arch Linux
wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz
sudo apt install libarchive-tools
sudo bsdtar -xpf ArchLinuxARM-rpi-aarch64-latest.tar.gz -C /nvme/Install linux-rpi-16k
For the following kernel download, change the URL to the latest version.
wget http://mirror.archlinuxarm.org/aarch64/core/linux-rpi-16k-6.6.23-1-aarch64.pkg.tar.xz
sudo rm -rf /nvme/boot/*
sudo tar xf linux-rpi-16k-6.6.23-1-aarch64.pkg.tar.xz -C /nvme/boot/Update /etc/fstab
Get the PARTUUID from running blkid and edit your /nvme/etc/fstab accordingly:
PARTUUID=0b322c87-01 /boot vfat defaults 0 2
PARTUUID-0b322c87-02 / ext4 defaults,noatime 0 1Activate NVMe boot again
Add this to the end of /nvme/boot/config.txt:
dtparam=nvme
dtparam=pciex1_gen=3Update root device
Edit the root parameter in /nvme/boot/cmdline.txt:
root=/dev/nvme0n1p2 rw rootwait console=serial0,115200 console=tty1 fsck.repair=yesUnmount
sync
sudo umount -R /nvmeBoot from NVMe
The password for alarm is alarm. You can su - with the password root to get root access.
Repair your installation
pacman-key --init
pacman-key --populate archlinuxarm
pacman -R linux-aarch64 uboot-raspberrypi
pacman -Syu --overwrite "/boot/*" linux-rpi-16kThis will modify your boot config files, so you need to verify their contents again.
Fix IPv6 connectivity
To avoid IPv6 connectivity problems later, install networkmanager and enable the service:
pacman -S networkmanager
systemctl enable NetworkManagerNow you can reboot.
My configuration
OS: Arch Linux ARM aarch64
Host: Raspberry Pi 5 Model B Rev 1.0
Kernel: 6.6.25-1-rpi-16k
Packages: 251 (pacman)
Shell: fish 3.7.1
CPU: ARMv8 rev 1 (v8l) (4) @ 2.80 GHz
Memory: 191.64 MiB / 7.86 GiB (2%)
Disk (/): 3.19 GiB / 476.44 GiB (1%) - btrfs
Local IP (end0): 192.168.0.2/24 *
Locale: en_US.UTF-8Thank you
The information in this post is based on these amazing people:
- Jeff Geerling for the
rpi-clonefork and showing how to boot from NVMe - Sven Kiljan for the steps to replace
ubootwithlinux-rpi