Catcrafts builds of the nura image for the fairphone 6
  • Shell 85.6%
  • Python 14.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jorijn van der Graaf 325aa0b7d4
fp6-vendor-blobs 1-r4: build the ath11k board data from the stock modem partition
The device tree asks ath11k for the Fairphone_Gen_6 board data entry.
Upstream linux-firmware's WCN6750 board-2.bin has no Fairphone entry, so
the driver silently falls back to the generic board-id 255 data: the FP6
Plus does not associate on it at all (user report 2026-10-14), and the FP6
keeps its channel list but its scans no longer find the 5 GHz networks
around it (two scans found 0 and 1 5 GHz BSSes against 14 with the
device's data, the home AP at -37 dBm among the missing), so it
associates on 2.4 GHz only (dev phone A/B). The stock modem partition
carries the device's own calibration as image/qca6750/bdwlan.elf.

New manifest directive ath11k-bdf: copy that ELF and wrap it into a
container under /lib/firmware/updates (searched first by the loader) that
is upstream's board-2.bin with every entry kept plus one BOARD entry under
the requested name. Verified structurally (ELF magic, size, the container
magic), no hash pin: the ELF belongs to the stock modem image and can
change with it. The sha256 of the base is kept beside the
override: a changed base (a linux-firmware upgrade) rebuilds it at the
next run, and a rebuild that reproduces the existing file installs
nothing; an entry upstream ships under the same name is taken first by the
driver, so the appended copy then goes unused. The fragment has no
rebind line: the service is ordered before udev's coldplug, which loads
the driver, so a fresh install builds the container before the first
probe (dev phone, the override removed and rebooted: built at 7.2 s,
coldplug from 7.3 s, the driver's board-data load at 8.7 s, the first
association on 5 GHz), and an installed phone gets it at its next boot; a
re-probe from a package hook would restart wifi in the middle of the
upgrade.

zstd joins the dependencies to read the compressed base. Dev phone: the
built container is byte-identical to the one hand-made from the stock
image by the reporter (sha256 186202ee...); the hook's call with the
override absent built it over a wifi session that stayed up, a second
call installed nothing and a --refresh call left the container unchanged.
2026-11-01 02:09:36 +01:00
.forgejo/workflows the images follow the upstream rename: postmarketOS is Nura 2026-10-14 01:41:43 +02:00
aports fp6-vendor-blobs 1-r4: build the ath11k board data from the stock modem partition 2026-11-01 02:09:36 +01:00
.gitignore gitignore dist/; fix empty then-branch (sh syntax) in the NV verdict 2026-08-09 02:44:39 +02:00
apk-resign.py imsd: sign from a readable copy of the abuild key 2026-09-15 22:36:12 +02:00
build.sh the images follow the upstream rename: postmarketOS is Nura 2026-10-14 01:41:43 +02:00
check-aports.sh fp6-vendor-blobs: the checksum the extractor change forgot, and a check that finds the next one in a second 2026-09-15 22:36:13 +02:00
FUNDING.yml LICENSE, README, FUNDING.yml: GPL-3.0-only for our code, Forgejo's funding file and the shared footer 2026-10-16 23:27:17 +02:00
install.sh the images follow the upstream rename: postmarketOS is Nura 2026-10-14 01:41:43 +02:00
LICENSE LICENSE, README, FUNDING.yml: GPL-3.0-only for our code, Forgejo's funding file and the shared footer 2026-10-16 23:27:17 +02:00
README.md Update README.md 2026-10-16 23:28:40 +02:00
registry-fetch.py build.sh: install the newest registry imsd and fingerprintd, verified the way a phone does 2026-09-15 22:36:13 +02:00

fp6-img

Flashable Nura images for the Fairphone 6/6+, built from the Catcrafts milos-linux combined-stable kernel branch.

Maintained by Jorijn van der Graaf (TheMightyCat) at Catcrafts.

What works

Everything on the combined-stable branch: display, touch, wifi, cellular data, NFC (reader), speaker audio, microphone, IMU, magnetometer, barometer, ambient light/proximity, fingerprint unlock through fingerprintd, plus VoLTE calls (both directions) through imsd.

Flashing

Download fp6-img-{DE}.tar.xz with your preferred DE from the latest release ({DE} is plasma for Plasma Mobile, calls through Plasma Dialer, or phosh for Phosh, calls through GNOME Calls) and unlock the bootloader (Fairphone's official process).

Install: with the phone in fastboot mode,

tar xf fp6-img-{DE}.tar.xz
cd fp6-img-{DE}
./install.sh

install.sh erases dtbo, flashes the rootfs, RAM-boots the kernel, writes the boot partition from inside Linux where the bootloader's NV-wipe cannot see it, then reads the modem NV back and reports the result. The bootloader never writes boot.

Default login: user / 147147 (same as official Nura images). Never re-lock the bootloader with a custom image installed.

License

GPL-3.0-only - see LICENSE.

Patches and packaging carried from other projects keep the license named in their files.

Funding

https://catcrafts.net/shop/donation - see FUNDING

Copyright (C) 2026 Catcrafts® catcrafts.net