image_pdfimage_print
Multiple Vidconsole Contexts for Expo

Multiple Vidconsole Contexts for Expo

U-Boot’s expo subsystem provides a way to create graphical menus and forms for user interaction. One key component is the textline object, which allows users to enter text, for example when typing a password or a filename. This post describes recent work to support multiple vidconsole contexts, making it easier for expo to handle multiple…

A Three-Phase PXE: Cleaning Up the Boot Process

A Three-Phase PXE: Cleaning Up the Boot Process

The PXE/extlinux boot mechanism is a cornerstone of U-Boot’s standard boot flow. It parses a configuration file (like extlinux.conf), presents a menu, and loads the kernel, initrd, and device tree for the chosen option. A typical configuration file looks like this: While functional, the traditional implementation relied heavily on callbacks: as the parser encountered a…

Taming the Beast: Refactoring Buildman for Maintainability

Taming the Beast: Refactoring Buildman for Maintainability

Buildman is the Swiss Army knife of U-Boot development. It handles the heavy lifting of building hundreds of boards in parallel, fetching the correct toolchains, and—perhaps most importantly—analysing the impact of your patches across git history. Whether you are checking for code bloat or verifying that a refactor doesn’t break a board you don’t own,…

Modernizing Buildman: A Case Study in AI-Assisted Refactoring

Modernizing Buildman: A Case Study in AI-Assisted Refactoring

U-Boot’s suite of Python tools—including buildman, patman, and binman—are critical parts of our development workflow. However, like any long-lived software project, technical debt accumulates. Buildman in particular was written a while ago, without much use of pylint and has grown significantly over the years. The accumulated pylint warnings, inconsistent naming conventions, and a monolithic structure…

Faster Tests and Better Debugging: Improvements to Malloc and test/py

Faster Tests and Better Debugging: Improvements to Malloc and test/py

Developing for U-Boot often involves chasing down elusive memory leaks and waiting for long test suites to finish. A recent series of 29 patches is aimed squarely at improving the developer experience in these areas. This series introduces powerful new malloc debugging tools, optimises the video subsystem, and significantly improves the performance of the test/py…

Silencing the Sphinx: Cleaner Documentation Builds

Silencing the Sphinx: Cleaner Documentation Builds

If you have ever run make htmldocs in U-Boot, you are likely familiar with the “wall of text” it produces. Between the standard Sphinx output, sub-make messages, and custom progress indicators, the build process has traditionally been very noisy. While verbose output can be useful for debugging the toolchain itself, it is a hindrance when…

Modernising Allocation: U-Boot Upgrades to dlmalloc 2.8.6

Modernising Allocation: U-Boot Upgrades to dlmalloc 2.8.6

For over two decades—since 2002—U-Boot has relied on version 2.6.6 of Doug Lea’s malloc (dlmalloc, old docs) to handle dynamic memory allocation. While reliable, the codebase was showing its age. In a massive 37-patch series, we have finally updated the core allocator to dlmalloc 2.8.6. This update brings modern memory efficiency algorithms, better security checks,…

Cleaning up the Nulls: Introducing ofnode Stubs for Non-DT Builds

Cleaning up the Nulls: Introducing ofnode Stubs for Non-DT Builds

In the world of U-Boot, the Device Model (DM) and Device Tree (DT) are the standard for hardware description. However, U-Boot runs on a massive variety of hardware, including constrained systems where full Device Tree support (OF_REAL) might be disabled. A recent patch cleans up how the core handles these “no-Device-Tree” scenarios, ensuring that code…

Introducing Codman: A Deep Dive into U-Boot Build Analysis

Introducing Codman: A Deep Dive into U-Boot Build Analysis

U-Boot is a massive project. With thousands of files, nearly endless configuration possibilities, and complex Kconfig dependencies, a single board configuration often only compiles a small fraction of the total source tree. For developers and maintainers, this complexity often leads to difficult questions: Simply searching for CONFIG_ macros or header inclusions is rarely enough. The…

Tidying up the FIT: Refactoring, Testing, and Shrinking U-Boot

Tidying up the FIT: Refactoring, Testing, and Shrinking U-Boot

Flattened Image Trees (FIT) are a cornerstone of modern U-Boot booting, offering a flexible way to package kernels, device trees, ramdisks, and firmware. However, the code responsible for printing information about these images—the output you see when running mkimage -l or iminfo—has been around for a long time. As with any legacy code, it had…