A how-to for FreeBSD 15.0 on Raspberry Pi 5 with NVMe

From: Arnold_Boer_-_LOCAVERDI® <arnold_at_locaverdi.com>
Date: Fri, 06 Feb 2026 12:54:37 UTC
I wrote a how-to for running FreeBSD 15.0 on a Raspberry Pi 5 with a Raspberry Pi M.2 HAT+ and a 256GB Integral M.2 NVMe SSD.
There are various resources on this subject, which we also used, but they were not at a level that was usable for an inexperienced user.

Read first, do later. Use at your own risk!

Some resources that we used:
    freebsd-arm mailing archive
    https://github.com/worproject/rpi5-uefi
    https://wiki.freebsd.org/arm/Raspberry%20Pi%205

Prerequisites

This is the list of items that we used. This works; other stuff could also work. We assume you use a Linux or UNIX-like OS to perform the creation of the SD card and USB stick.

    Raspberry Pi 5 8GB
    Raspberry Pi M.2 HAT+
    256GB Integral M.2 NVMe SSD
    Original Raspberry Pi USB-C Power adapter
    Sandisk 32GB Max Endurance microSD card
    Usb stick, Corsair Survivor Stealth V2 64GB
    Conceptronic ABBY12G USB Ethernet module, the onboard Ethernet does not seem to work.

How-to

Get FreeBSD from https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/15.0/ and pick https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/15.0/FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz.

Extract this with: xz -d FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz

Write this to the SD card. You can use dd for this. For example: dd if=FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img of=/dev/sdX bs=1M conv=sync status=progress

You also need UEFI. This will be written to a USB stick. Get it from https://github.com/worproject/rpi5-uefi

Pick the latest release, https://github.com/worproject/rpi5-uefi/releases/download/v0.3/RPi5_UEFI_Release_v0.3.zip

Format the USB stick so it contains just one FAT32 partition.

Extract the contents of rpi5-uefi and write the 3 files to the USB stick.

Make sure you've physically installed the M.2 hat correctly, including the NVMe drive.

Make sure the NVMe has no bootable system on it; otherwise, the Raspberry Pi will just boot this. You could do a dd if=/dev/zero of=/dev/nvmeXnY to destroy the current content of the nvme.

Plug in the USB Ethernet device.
Plug in the USB stick.
Plug in the SD card.
Plug in an HDMI cable.
Plug in a USB keyboard.
Plug in power to boot the rpi5.
Press escape to enter uefi. In the boot menu, select the SD card to boot from.

Now FreeBSD should boot correctly from the sdcard.
Log in with user root and password root.

To get the latest updates for the system, run: freebsd-update fetch
To install them, run: freebsd-update install

To be able to install pkg, the time setting should be correct.
Set time (in UTC) with: date 2602051054.00
Sync with timeserver with: service ntpd onestart
You might need to repeat setting the time again after power off. We have not tested the Raspberry Pi RTC battery.

Install pkg by running: pkg
It will offer you to install the pkg package.
Install wget: pkg install wget
Download the same file as you wrote to the SD card: wget https://download.freebsd.org/releases/arm64/aarch64/ISO-IMAGES/15.0/FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz
Extract with: xz -d FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img.xz
Write to NVMe with: dd if=FreeBSD-15.0-RELEASE-arm64-aarch64-RPI.img of=/dev/nda0 bs=1M conv=sync status=progress
Just to be sure: sync
Shutdown: halt

Power off and remove the SD card.
Power on.
Now the system should boot from nvme!

Now it is time to get rid of the USB stick.
Download the rpi5-uefi files again with: wget https://github.com/worproject/rpi5-uefi/releases/download/v0.3/RPi5_UEFI_Release_v0.3.zip
Extract with: unzip RPi5_UEFI_Release_v0.3.zip
Copy the 3 files to /boot/efi/
Shutdown with: halt
Power off
Power on
Grow the fs to use the entire NVMe: growfs /dev/ufs/rootfs

You are done!

Provide good cooling because the fan does not seem to work.


I hope this helps many. I will try to update this how-to at our website, https://www.locaverdi.com/freebsdrpi5.html

Kind regards,

Arnold Boer