One Image to Rule Them All: Portably Handling Hardware Variants 

In most embedded projects, product variant handling equates to juggling images as combining them into a single image was either deemed a distant dream or an unnecessary convenience.

Yet, the ability to ship one unified image would simplify development and maintenance considerably: A full build is quicker, development friction is reduced, number of artifacts to store and test is reduced and for cases where the end user is involved in the update process, even UX is improved.

To get there, modularization is required across the stack: Whereas decisions could be done at build time depending on the “platform” before, the platform can now be many different things. On a first glance, this increases complexity, but actually it’s only shifted around: from the build system and the life cycle management into the runtime software, which would now dynamically select the proper configuration.

Fortunately, the tools are there, even if not always used. So in his talk, Ahmad will review some real-world examples on how to leverage the flexibility afforded by OpenEmbedded, systemd, the Linux kernel, RAUC, FIT, device-tree overlays and the barebox bootloader to build portable bootloader, kernel and read-only root file system images.

Because in the end, despite their differences, much more unites our images than divides them.

Ahmad Fatoum, Pengutronix

Video: YouTube

Slides: one-image-to-rule-them-all_fatoum

oil painting of a robot dressed as a chef in paris with eiffel tower in the background

Ahmad joined the kernel team at Pengutronix in 2018 to work full-time on furthering Linux world domination. He does so by helping automotive and industrial customers build embedded Linux systems based on the mainline Linux kernel. Having a knack for digging in low-level guts, his tasks include hardware enablement, Linux driver development and boot loader porting. Ahmad is an active contributor to a number of open-source projects, including the Linux kernel and the barebox boot loader.