A Nerves system for the IOT-DIN gateway

Writing a custom Nerves base image for a CompuLab IOT-DIN-IMX8PLUS by hand: the packaging bugs, the flashing dead end, and the DDR failure that stopped it booting.

Five parts on getting Elixir onto an industrial DIN-rail gateway that nobody has published a Nerves system for. Authored file by file rather than forked, which meant hitting every packaging problem personally.

The useful parts are the failures: four packaging bugs between a system that compiles and a firmware that flashes, a vendor flashing tool that does not work on this laptop at all, and a bootloader that trained DRAM incorrectly and said so in five words.

Part 1
5 min

Authoring a Nerves system by hand

Why I wrote a custom Nerves base image file by file for a CompuLab IOT-DIN-IMX8PLUS instead of forking a sibling board's system.

Part 2
6 min

It compiles. It still won't package.

Four packaging bugs between a Nerves system that builds and a firmware that flashes — plus the kconfig hang that looks exactly like a working build.

Part 3
6 min

Flashing without the vendor's flashing tool

NXP's uuu dies at 8% on an Apple Silicon Mac. The board's own U-Boot has ums and fastboot, and those use bulk USB, which works fine.

Part 4
5 min

Ran out all six config attempts

The board flashed perfectly and never reached Linux. A Kconfig choice split upstream had silently retargeted my bootloader at the wrong DRAM.

Part 5
6 min

Provisioning the next board

The repeatable runbook, and the reason flashing a pre-made image left me with a 512 MB data partition instead of 28 gigabytes.