← all projects

project

Bringing up a thermal camera nobody had drivers for

Reverse-engineering an undocumented sensor's I²C register map and writing the V4L2 driver that made it usable on ARM64 Linux.

Date
Jun 2025
Role
Driver development
Status
shipped
Built with
Linux kernel, C, V4L2, device tree, ARM64

The module was cheap, available, and shipped with a Windows-only SDK and a datasheet that stopped at the pinout. Everything past “it speaks I²C” had to be worked out with a logic analyser.

Getting the register map

Capturing the SDK’s own initialisation sequence gave the order of operations. Matching those writes against the visible behaviour of the sensor gave the meaning of most of them. About a dozen registers are still labelled with what they do rather than what they are called.

The driver

A standard V4L2 subdev, so anything that already speaks V4L2 — GStreamer, OpenCV, v4l2-ctl — works against it without knowing any of this happened. That is the whole point of writing a driver instead of a library.

Embedded LinuxReverse Engineering