uman: A New Developer Companion for U-Boot

Developing for U-Boot often involves juggling a variety of tools: buildman for compilation, patman for patch submission, test.py for integration testing, and git for version control. While these tools are powerful individually, orchestrating them—especially when dealing with complex CI pipelines and dependencies—can be tedious.
To bridge these gaps, we are introducing uman (U-Boot Manager), a new command-line tool headed for Concept, designed to streamline the daily workflow of U-Boot developers.
uman unifies build, test, and CI interaction into a single interface, handling the “glue” logic that developers usually script themselves.
1. Taming the CI Pipeline
One of the biggest friction points in development is pushing to GitLab CI. Often, you only need to run a specific set of tests, but the default pipeline runs everything. uman ci gives you fine-grained control over what runs via git push options, without needing to manually edit YAML files.
# Push to CI, but ONLY run the pytest suite (skip world build) uman ci -p # Push to CI, but only run tests for the 'sandbox' board uman ci -p sandbox # Push and automatically create (or update) a Merge Request uman ci -m
2. Simplified Local Testing
Running U-Boot’s pytest framework locally requires setting up environment variables, finding the correct build directory, and passing specific flags. uman py automates this. It detects your source tree, sets up paths for hooks, and handles board configuration.
# Run pytests for sandbox (automatically builds u-boot first) uman py -b sandbox # Run a specific test, keeping artifacts for inspection uman py -b sandbox test_vbe -P
For developers working on C-based unit tests, uman introduces a C-Test Direct Runner (-C). If you have already set up the test environment (using -S -P), you can iterate rapidly on the C code without reloading the Python test harness every time:
# Fast iteration on a C test uman py -C fs_test_ext4l_probe
3. Dependency Management
Testing often requires external firmware blobs (OpenSBI, TF-A, QEMU). Previously, developers had to manually hunt these down. uman setup automates fetching and building these dependencies.
# Download and install QEMU, OpenSBI, and toolchains needed for testing $ uman setup Setting up qemu... All QEMU packages are installed Setting up opensbi... Downloading OpenSBI v1.3.1... OpenSBI rv64: /home/sglass/dev/blobs/opensbi/fw_dynamic.bin OpenSBI rv32: /home/sglass/dev/blobs/opensbi/fw_dynamic_rv32.bin Setting up tfa... Cloning TF-A... Cloning into '/home/sglass/dev/blobs/tfa/src'... remote: Counting objects: 6639, done remote: Finding sources: 100% (6639/6639) remote: Total 6639 (delta 686), reused 4523 (delta 686) Receiving objects: 100% (6639/6639), 12.94 MiB | 10.11 MiB/s, done. Resolving deltas: 100% (686/686), done. Building TF-A for QEMU SBSA... TF-A bl1: /home/sglass/dev/blobs/tfa/bl1.bin TF-A fip: /home/sglass/dev/blobs/tfa/fip.bin Setting up xtensa... Downloading Xtensa dc233c toolchain... Xtensa already configured in ~/.buildman Xtensa toolchain: /home/sglass/dev/blobs/xtensa/2020.07/xtensa-dc233c-elf Setup complete
4. Build Management
While buildman is excellent, uman build provides a quick wrapper for common development tasks, such as forcing a fresh build, enabling Link Time Optimization (LTO), or inspecting binary sizes immediately after a build.
# Build sandbox and show the size of the resulting binaries uman build sandbox --size # Build with disassembly output for debugging uman build sandbox -O
Configuration
uman is designed to work out of the box, but it is also configurable via ~/.uman, allowing you to define persistent paths for builds, firmware blobs, and test hooks.
This tool aims to reduce the “context switching” overhead in U-Boot development, letting you focus more on the code and less on the tooling parameters.
Future
uman takes advantage of some of the newer features in Concept but it is compatible with the main tree also.
uman development is in its early stages and will expand over time. For now it is in a separate github repo. If you try it out, please send some feedback on the mailing list. For now, PRs are welcome!