Secure boot on Nerves, on a CompuLab IOT-DIN-IMX8PLUS

Carrying everything learned on the lab unit into a real, purpose-built Nerves system — without touching the build running in the field.

The gateway alongside the Raspberry Pi that ended up doing the USB work
The gateway alongside the Raspberry Pi that ended up doing the USB work

The second half of the project. Same hardware, same lab unit, but now against a real production Nerves system — done in a fork, so the version in the field is never at risk.

Part 1
3 min

From a lab unit to a production Nerves system on the IOT-DIN-IMX8PLUS

The first series proved HAB secure boot on a disposable lab unit running stock Linux. This one carries it into a real Nerves system — in a fork, so the build that runs in the field is never at risk. Same board, different starting point, and several things that do not transfer.

Part 2
4 min

Forking the Nerves system, and enabling HAB inside a Buildroot build

Three real bugs blocked the first three attempts: a nerves package version whose error message points nowhere near the cause, a missing .tool-versions, and the same SPL SRAM overflow track A hit. Plus the arm64 header field that is at offset 0x10, not 0x4.

Part 3
3 min

Signing the Nerves kernel on i.MX8M Plus, clean on the first try

The same kernel-signing procedure as track A, on a different build — and it passed first time, because the two things that went wrong last time were checked rather than assumed. A 691,712-byte padding gap, and a signed range that goes through the IVT.

Part 4
3 min

Making the Nerves build sign imx-boot and the kernel automatically

Wiring signing into the build, and a correction worth more than the wiring: I planned to point fwup.conf at signed artifacts, and that was the wrong layer entirely — the signed bootloader is not in the .fw file at all.

Part 5
4 min

It boots signed — and the HAB gate in booti I did not know I had

The signed Nerves firmware boots. And a finding that deleted an open task: enabling CONFIG_IMX_HAB wires an automatic fail-closed authentication gate into booti itself, for every kernel boot, with no bootcmd changes at all. Plus a fleet gotcha about who can SSH in.