The phone is one SoC, 4x Cortex-A520 + 4x Cortex-A720, and the package is built for nothing else, so build for it: -march=armv8.6-a+fp16fml+aes+sha3+sm4 -mtune=cortex-a720 instead of the generic Armv8 baseline, for the daemon, the agent and libqcomtee alike. That is gcc's own -march=native expansion on the phone, re-based on armv8.6-a so clang can express the same set; 8.6 is the highest level whose mandatory set the phone exposes (8.7 would assume WFxT, 9.x SVE2 - neither is in its hwcaps, and SVE2 code would SIGILL). Same string as the fp6-img aports and kernel.
48 lines
No EOL
1.7 KiB
Markdown
48 lines
No EOL
1.7 KiB
Markdown
# fingerprintd
|
|
|
|
Fingerprint daemon for the Fairphone 6 (`milos`, SM7635) on mainline Linux.
|
|
|
|
`fingerprintd-core` is a static library with no GLib, no libqcomtee and no
|
|
system headers. Everything in it is a wire format or a state machine that was
|
|
recovered by reverse-engineering, so all of it is pinned by tests that run on a
|
|
dev box with no phone, no TEE and no sensor. The daemon shell holds everything
|
|
that touches hardware.
|
|
|
|
## Build
|
|
|
|
```sh
|
|
crafter-build # bin/fingerprintd-<target>-<march>/fingerprintd
|
|
crafter-build test # the unit suites
|
|
```
|
|
|
|
Cross-compiling for the phone:
|
|
|
|
```sh
|
|
packaging/make-sysroot.sh
|
|
crafter-build -- --target=aarch64-alpine-linux-musl --sysroot=~/.cache/fingerprintd/sysroot-aarch64-alpine --march=armv8.6-a+fp16fml+aes+sha3+sm4 --mtune=cortex-a720
|
|
crafter-build test --target=aarch64-alpine-linux-musl --sysroot=~/.cache/fingerprintd/sysroot-aarch64-alpine --march=armv8.6-a+fp16fml+aes+sha3+sm4 --mtune=cortex-a720
|
|
```
|
|
|
|
Verified on the device: all five suites pass cross-built and run on the phone
|
|
itself, not only under emulation.
|
|
|
|
```
|
|
fprintd-enroll -f right-index-finger user ten stages, enroll-completed
|
|
fprintd-list user - #0: right-index-finger
|
|
fprintd-verify user (wrong finger) verify-no-match, on the first press
|
|
fprintd-verify user (enrolled finger) verify-match, on the first press
|
|
```
|
|
|
|
## Runtime dependencies, not carried here
|
|
|
|
The `focal64` trustlet is proprietary and is not in this repo. It is
|
|
extracted from the device's own stock Android partition on first boot by the
|
|
`fp6-vendor-blobs` mechanism, the same way the audio firmware is.
|
|
|
|
## License
|
|
|
|
GPL-3.0-only, see LICENSE.
|
|
|
|
## Copyright
|
|
|
|
Copyright (C) 2026 Catcrafts® catcrafts.net |