nerves

20 posts tagged nerves, newest first.

Tagged nerves

20 posts
11 Sep 2026
15 min

Beyond mTLS: identity for a fleet of IoT devices

Certificates and mTLS are the easy part. The hard part is identity over a device's whole life: first enrolment, rotation, power loss mid-rotation, and a gateway that was offline for two years.

architectureelixiriotnervessecurity
11 Sep 2026
7 min

Scenic on Nerves: scenes, graphs, drivers, and four things that bit me

Scenes, graphs, components and drivers on an STM32MP157F-DK2 — then the four gotchas that compile cleanly and fail on the device: the required assets module, the child spec that is a plain list, the missing input: style that made every button inert, and text_align: :center not working.

displayelixirembeddednervesscenicstm32mp1
11 Sep 2026
7 min

nerves_system_br: what it actually is, and where your OTP version is decided

An afternoon spent finding where a Nerves target's Erlang version is really decided — and discovering it is encoded in the filename of a patch inside a dependency I had never opened. Plus the Kconfig default that will silently move you to OTP 29 the moment you bump.

buildrootelixirembeddednervesotp
10 Sep 2026
9 min

The STM32MP157F-DK2 display stack, and the Vivante GPU I did not need

Between an Elixir process and a lit pixel on the DK2 there is an LTDC, a MIPI DSI host, an OTM8009A panel and a Goodix touch controller. I spent a day preparing to enable the Vivante GC NanoUltra, then read scenic_driver_local's source and found it renders in software to /dev/fb0.

displayelixirembeddednervesscenicstm32mp1
10 Sep 2026
6 min

Previewing a Scenic UI on the host, with no screen and no board

An hour spent trying to open a window that was never going to be drawn, then the realisation that a Scenic graph is just data. Walking it and rendering to SVG found two layout bugs in a minute that had survived 49 tests and a review.

displayelixirnervesscenicstm32mp1testing
10 Sep 2026
5 min

A drift-free countdown on an STM32MP157F-DK2, tested in milliseconds

Counting down by subtracting the tick interval drifts on an embedded board. Deriving the remaining time from a monotonic deadline instead makes it drift-free by construction — and injecting the clock turns a 25-minute test into a map update. It also caught a real race.

elixirnervesotpstm32mp1testing
24 Aug 2026
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.

embeddedfwupimx8linuxnerves
17 Aug 2026
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.

embeddedimx8linuxnervesu-boot
10 Aug 2026
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.

embeddedimx8linuxnervesu-boot
03 Aug 2026
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.

buildrootelixirembeddednerves
27 Jul 2026
6 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.

buildrootelixirembeddedimx8nerves
20 Jul 2026
93 min

Building the Nerves system: the first attempt

Before I show you the first build attempt (and its failures), I need to clear up something that confused me at first.

elixirembeddednervesstm32mp1
13 Jul 2026
15 min

Device trees demystified: reading the hardware map

On a desktop PC, when you plug in a USB device or install a PCI graphics card, the operating system discovers it automatically. PCI has enumeration.

elixirembeddednervesstm32mp1
06 Jul 2026
14 min

The STM32MP1 boot chain, from power-on to Linux

I've been using Nerves for years, and for most of that time the boot process was a black box. Plug in power, wait a few seconds, get an IEx prompt. Magic.

elixirembeddednervesstm32mp1
29 Jun 2026
6 min

Why build a custom Nerves gateway from scratch

I've been using Nerves for a while now. Raspberry Pi, BeagleBone — the usual suspects. You pull in the official system, write your Elixir code, burn firmware,…

elixirembeddednervesstm32mp1
15 Jun 2026
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.

elixirembeddedhabimx8nervessecure-bootu-boot
08 Jun 2026
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.

buildrootelixirembeddedfwupimx8nervessecure-boot
01 Jun 2026
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.

cstembeddedhabimx8nervessecure-boot
25 May 2026
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.

buildrootelixirembeddedimx8nervessecure-boot
18 May 2026
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.

elixirembeddedimx8nervessecure-boot