
The U-Boot boot process relies heavily on the Flattened Image Tree (FIT) format to package kernels, ramdisks, device trees, and other components. At the heart of this lies the fit_image_load()
function, which is responsible for parsing the FIT, selecting the right images, and loading them into memory.
Over the years, as more features like the “loadables” property were added, this important function grew in size and complexity. While it was a significant improvement over the scattered code it replaced, it had become a bit unwieldy—over 250 lines long! Maintaining and extending such a large function can be challenging.
Recognizing this, U-Boot developer Simon Glass recently undertook a refactoring effort to improve its structure and maintainability.
A Classic Refactor: Divide and Conquer
The core strategy of this patch series was to break down the monolithic fit_image_load()
function into a collection of smaller, more focused helper functions. This makes the code easier to read, debug, and paves the way for future feature development.
The refactoring splits the loading process into logical steps, each now handled by its own function:
- Image Selection: A new
select_image()
function now handles finding the correct configuration and image node within the FIT. - Verification and Checks: The
print_and_verify()
andcheck_allowed()
functions centralize image verification and checks for things like image type, OS, and CPU architecture. - Loading and Decompression: The actual data loading and decompression logic were moved into
handle_load_op()
anddecomp_image()
, respectively.
Along with this restructuring, the series includes several smaller cleanups, such as removing unused variables and tidying up conditional compilation (#ifdef
) directives for host builds.
Test Suite Improvements ⚙️
Good code changes are always backed by solid tests. This effort also included several improvements to the FIT test suite:
- The
test_fit()
routine was renamed totest_fit_base()
to prevent naming conflicts with other tests. - The test was updated to no longer require a full U-Boot restart, significantly speeding up test execution.
- A new check was added to ensure U-Boot correctly reports an error when a required kernel image is missing from the FIT.
For a detailed look at all the changes, you can check out the merge commit or patches.