What we've been reading in January (2022)
Here are the articles, videos, and tools that we’ve been excited about this January.
We hope you enjoy these links, and we look forward to hearing what you’ve been reading in the comments or on the Interrupt Slack.
RTL Jobs is a new job site for people who specialize in FPGA and RTL design created by Nash Reilly. Follow the job site on Twitter at @RTLjobs.
Articles & Learning
Library order in static linking - Eli Bendersky’s Website by Eli Bendersky
This remains one of our favorite articles among us firmware engineers at Memfault. It details the order in which the linker will pull objects into the final firmware. - Tyler
Pay attention to WebAssembly - Harshal Sheth by Harshal Sheth
Good overview of where WebAssembly is useful. In the embedded world, I see huge potential for it to implement sandboxed plugin systems at near-native speed and memory footprint. And yes, “WebAssembly” is a misnomer… - Heiko
So you want to build an embedded Linux system? by Jay Carlson
A fantastic and detailed article on what makes up an embedded Linux system, from the hardware up, from the amazing Jay Carlson! - Noah
Raspberry Pi microSD card performance comparison (2019) by Jeff Geerling
Jeff Geerling tests a number of popular SD cards for performance on a Raspberry Pi - Noah
Linux on an 8-bit micro? - Dmitry.GR by Dmitry
Another old but gold article showing Linux running on an Atmega 🤩. - Noah
The (8501) Embedded Controller and Its Legacy
A run through of the embedded controller on a modern laptop (in case the link didn’t spoil it already, spoiler! it’s an 8051 😅). - Noah
“Fast Kernel Headers” Tree -v1: Eliminate the Linux kernel’s “Dependency Hell”
Huge effort to reduce the include graph for Linux kernel headers (2000+ commits!), has an impressive improvement to build times. - Noah
A Strategy for Reporting Version Information from Bootloaders - Embedded Artistry by Phillip Johnston
Outline of a strategy Embedded Artistry uses to access versions in their software.
Debugging an Arduino project with GDB on Classic ATtiny and Small ATmega MCUs - CodeProject by Bernhard Nebel
A tutorial for people who finally want to debug their Arduino projects that run on AVR MCUs using the GNU project debugger GDB. - Colleen
Adding Unit Tests To Your Firmware Using Ceedling + GitHub Actions CI in Bluetooth Development - Ovyl by Nick Sinas
An article from a member of the Interrupt community about using Github actions and Ceedling to test Bluetooth code. - François
Rust on Apache NuttX OS by Lee Lup Yuen
A getting started post with Rust, Apache NuttX, the Pinedio LoRa module, a RISC-V board, and more. - Tyler
Encode Sensor Data with CBOR on Apache NuttX OS by Lee Lup Yuen
An incredibly detailed article about encoding data with TinyCBOR. If you haven’t done much data encoding with C, it’s a great place to start, as it’s never quite as trivial as it would be in higher level languages. - Tyler
Making nice-looking and interactive diagrams for your PCBs
A tool that takes KiCAD files and produces interactive HTML (highlights + descriptions of components and pinouts) for your PCB that you can embed in your own pages. - Heiko
Dumping Firmware With a 555 - In Which Jarrett Builds by Jarrett
Post about voltage glitching with an STM8 in order to bypass the read-out protection and dump the firmware, one byte at a time. - Tyler
On Proebsting’s Law - zeux.io
An interesting look at how LLVM compilation time and generated code performance has changed over time. From LLVM Weekly. - Noah
VolksEEG: Rust Development On Adafruit nRF52840 Feather Express - EmbeddedRelated by Steve Branam
A great play-by-play on getting an nRF52840 set up to develop and debug Rust with all the fixins, such as VSCode, Docker, and serial output. - Tyler
Hacking a VW Golf Power Steering ECU - Part 1 by Willem Melching
An in-depth firmware reverse engineering project on the VW power steering ECU to enable self-driving on older VW models. - François
Multi-threaded Singleton Access in embedded C++ - Stratify Labs
Using C++, you can automatically and cleanly control access to resources in a multi-threaded environment using singletons. We’ve all been in those C codebases where mutex unlocks and locks were forgotten at times. - Tyler
Project Zero: One font vulnerability to rule them all #1: Introducing the BLEND vulnerability (2015) by Mateusz Jurczyk
Legendary exploit taking advantage of TrueType/PostScript fonts, which operate a kind of stack-based VM, which can be broken out of. - Noah
Tools & Projects
combustion-inc/combustion-ios-ble: Bluetooth Low Energy framework for communicating with Combustion Inc. Predictive Thermometers
Combustion Inc., a company building a BLE-based multi-point thermometer, open-sourced their iOS BLE communication framework which uses Apple‘s Combine framework. - Marcel
Mahlet-Inc/hobbits: A multi-platform GUI for bit-based analysis, processing, and visualization
Interesting tool for analyzing data packets or fragments at a very low level, both interactivity through a GUI or via a command line interface. Supports custom plugins/filters for enhancing decode. - Noah
Aircoookie/WLED: Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi!
Nicely featured LED strip controller using ESP8266/ESP32. I particularly enjoyed this part of the quickstart guide “If everything worked the first thirty LEDs will light up in bright orange to stimulate courage, friendliness and success!” 😀 - Noah.
Ovyl/tabouli: TUI for sending CLI commands to your firmware and devices
They made a TUI specifically designed for interfacing with a serial port on an embedded device. It stores command history, runs a suite of test automation commands, and more! Written in Go.
Pulp - Playdate
We’re huge fans of the Playdate at Memfault, and they just released a new online game designer.
News, Updates, and Random Tidbits
Windows WSL2 is getting USB support? (Twitter) by Jonathan Beri
Looks like WSL2 is getting USB support soon! Very exciting, for setups that need native Windows (e.g. for Altium), having access to an efficient Linux layer with USB access enables some nice development processes (e.g. building embedded Linux, better filesystem, and caching performance). - Noah
Introducing MicroShift - Red Hat Emerging Technologies by Ricardo Noriega De Soto
Redhat is building a Kubernetes distribution for the edge. - François
Framework - Open Sourcing our Firmware by Nirav Patel
The team behind the modular laptop design “Framework” published their firmware for the “Embedded Controller”. This is exciting as it’s another step towards a consumer product you truly own (it currently doesn’t seem to support coreboot).
Announcing Rust 1.58.0 - Rust Blog
Captured identifiers in print strings! - Noah
Improving LLVM Infrastructure - Part 1: Mailing lists - The LLVM Project Blog
LLVM Project is moving to Discourse! This usually wouldn’t make a list like this but we all know how crawling over mailing lists is a huge pain, so maybe this is a new trend!
Research log: PCB stepper motor
Amazing hardware post starting from “I think that’s a cool idea” to “After a few tries, I think I finally got it”. Watch the embedded videos at the very least, and if you’re craving more, learn how to move magnets across a PCB using electrical currents.
Raspberry Pi Direct: buy RP2040 in bulk from just $0.70 - Raspberry Pi
A microcontroller that can be bought in 2022. Sigh.
Locked Out of ‘God Mode,’ Runners Are Hacking Their Treadmills - WIRED by Matt Burgess
There is currently a big debate in the industry about user ownership vs. user experience. Nordictrack clearly is on one hand of that conversation, and it’s hitting the mainstream news.