No description
  • C 86.2%
  • Shell 11.4%
  • Makefile 2.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-09 12:55:41 +09:00
.forgejo/workflows Package libfprint MR !580 and a spidev KMP for the GPD MicroPC 2 2026-10-09 11:50:25 +09:00
libfprint-mafp8800 Package libfprint MR !580 and a spidev KMP for the GPD MicroPC 2 2026-10-09 11:50:25 +09:00
mafp8800-spidev mafp8800-spidev: follow spec-cleaner and the openSUSE KMP policy 2026-10-09 12:09:01 +09:00
obs README: condense 2026-10-09 12:53:35 +09:00
.gitignore Package libfprint MR !580 and a spidev KMP for the GPD MicroPC 2 2026-10-09 11:50:25 +09:00
build-local.sh build-local.sh: allow choosing the OBS project/repository for osc builds 2026-10-09 11:51:37 +09:00
README.md README: describe the actual OBS module signing 2026-10-09 12:55:41 +09:00

mafp8800-tumbleweed

openSUSE Tumbleweed packages for the Microarray MAFP8800 fingerprint reader of the GPD MicroPC 2 (ACPI MAFP8800, spi-MAFP8800:00).

directory OBS package content
libfprint-mafp8800/ libfprint-mafp8800 Factory libfprint 1.94.10+tod1 plus the MAFP8800 driver from libfprint MR !580. Builds libfprint-2-2, libfprint-2-tod1, … with the stock names.
mafp8800-spidev/ mafp8800-spidev KMP building the in-kernel spidev driver (mafp8800-spidev-kmp-default), plus /usr/lib/modprobe.d/50-mafp8800-spidev.conf (options spidev bufsiz=32768).

OBS project: home:akusto:mafp8800, sources pulled from this repository via scmsync (?subdir=<dir>#main).

Why

  • The openSUSE kernel has CONFIG_SPI_SPIDEV disabled; the libfprint driver needs /dev/spidevN.N. The KMP builds drivers/spi/spidev.c from kernel-source unchanged, for every flavor in kernel-syms.
  • The driver sends whole frames in one SPI_IOC_MESSAGE; spidev's default 4 KiB buffer is too small, hence bufsiz=32768.
  • The driver registers FPI_DEVICE_UDEV_SUBTYPE_SPIDEV, so libfprint's generated 70-libfprint-2.rules loads spidev and binds spi-MAFP8800:00 to it (driver_override). No other SPI device is touched; nothing has to be done by hand after boot.
  • libfprint-mafp8800.patch = the MR driver unchanged + its Meson hunks ported to the 1.94.10+tod1 layout. Everything else in that directory is identical to openSUSE:Factory.

Both packages become obsolete once the Tumbleweed kernel ships spidev and the MR is merged into the libfprint in Factory.

Build

sudo zypper in rpm-build build osc kernel-syms kernel-source
./build-local.sh libfprint-mafp8800     # rpmbuild → /var/tmp/mafp8800-build/<pkg>/RPMS
./build-local.sh mafp8800-spidev
./build-local.sh --osc --project home:akusto:mafp8800 mafp8800-spidev   # osc build chroot

Specs keep Release: 0. OBS stamps 100.<CI_CNT>.<B_CNT> (project config obs/prjconf), build-local.sh stamps 100.0.local, so the rebuilt libfprint-2-2 sorts above the stock package (Factory release is 3.1). The KMP is built for the kernel that kernel-syms points to.

Install

sudo zypper ar -f https://download.opensuse.org/repositories/home:/akusto:/mafp8800/openSUSE_Tumbleweed/ mafp8800
sudo zypper in mafp8800-spidev mafp8800-spidev-kmp-default
sudo zypper in --from mafp8800 libfprint-2-2 libfprint-2-tod1

Or install the RPMs from a local build with zypper in <files>. Remove any manual setup first (/etc/modprobe.d/spidev*.conf, hand-copied spidev.ko, copies of 70-libfprint-2.rules in /etc/udev/rules.d).

OBS signs the module with the project key (modinfo spidev.ko shows signer: home:akusto:mafp8800 OBS Project). With Secure Boot on, enroll that certificate once (osc signkey --sslcert home:akusto:mafp8800 > obs.crt, mokutil --import obs.crt, confirm at the next boot) or the module will not load. Locally built modules are unsigned.

Check and use:

ls -l /dev/spidev0.0
cat /sys/module/spidev/parameters/bufsiz      # 32768
fprintd-enroll -f right-index-finger
fprintd-verify -f right-index-finger          # Verify result: verify-match (done)

PAM (optional): zypper in fprintd-pam && pam-config -a --fprintd. Keep a root shell open and test sudo -k; sudo true from another terminal before closing it; pam-config -d --fprintd reverts.

Remove

sudo zypper rm mafp8800-spidev-kmp-default mafp8800-spidev
sudo zypper in --from repo-oss libfprint-2-2 libfprint-2-tod1
sudo zypper rr mafp8800

OBS setup

One-time (see obs/README.md): project meta, osc meta prjconf -F obs/prjconf, package meta with scmsync. OBS does not poll Git; after a push either run osc service remoterun home:akusto:mafp8800 <package> or add a Forgejo webhook to https://api.opensuse.org/trigger/runservice?project=home:akusto:mafp8800&package=<package> with header Authorization: Token <osc token --create --operation runservice …>. .forgejo/workflows/obs-sync.yml does the same from Forgejo Actions using the secrets OBS_TOKEN_LIBFPRINT / OBS_TOKEN_SPIDEV and the variable OBS_PROJECT.

Updating

  • New Factory libfprint: copy tarball, spec, .changes and patches from openSUSE:Factory/libfprint, re-add Patch3, check the patch applies.
  • New kernel: nothing to do, OBS rebuilds the KMP when kernel-syms changes. mafp8800-spidev/spidev.c is only the --with vendored_spidev fallback.

License

Packaging files: same terms as the openSUSE packaging they derive from. libfprint-mafp8800.patch: LGPL-2.1-or-later. spidev.c: GPL-2.0-or-later.