Embitude Infotech1

FIT Images in Embedded Linux

While continuing my exploration on the LuckFox Mini A Board, I stumbled upon something interesting — the board uses a FIT Image for its kernel.

At first glance, it looked like a single binary file. But as I dug deeper, I realized — it’s not just a kernel image. It’s a single container combining multiple images together — the kernel, device tree, ramdisk, and sometimes even configuration data — all neatly packaged as one.

Let’s understand what this means, why it matters, and how you can create one yourself.


⚙️ What Is a FIT Image?

FIT (Flattened Image Tree) is an image format introduced by U-Boot, the popular open-source bootloader used in Embedded Linux systems.

It’s designed to bundle multiple boot components — like the kernel, device tree blobs (DTBs), and root filesystem (initramfs) — into one single structured file.

You can think of a FIT Image as a well-organized ZIP file for your embedded boot process — except that it’s parsed and verified by U-Boot at runtime.

A FIT image typically has:

  • One kernel image (zImage or Image)
  • One or more device tree blobs (DTBs)
  • Optional ramdisk/initramfs image
  • Optional configurations for different boards or revisions

🧩 Why FIT Images? — Advantages Over the Traditional Approach

In the traditional boot process, U-Boot loads the kernel, device tree, and optionally initramfs separately. This works fine — but it comes with limitations, especially when you start scaling.

🔹 1. Simplified Boot Process

Instead of managing multiple files and load addresses, the bootloader just loads one unified image — reducing complexity and possible errors.

🔹 2. Version Integrity

FIT supports cryptographic verification using SHA-1/SHA-256 and RSA signatures, ensuring that what’s loaded is exactly what was intended. This is crucial for production-grade systems.

🔹 3. Multiple Configurations in One Image

You can store multiple kernel + DTB pairs (for different hardware variants or revisions) inside the same FIT.
At boot, U-Boot chooses the right configuration dynamically — based on environment variables or board detection.

🔹 4. Easier Updates

When performing OTA updates or SD card flashing, you just replace one FIT file instead of three or four different binaries — making system maintenance much simpler.

🔹 5. Portability & Clean Integration

FIT aligns perfectly with the Device Tree philosophy — separating hardware details from core kernel logic while keeping things portable.


🧠 The Internal Structure — It’s All About the Device Tree

Internally, the FIT image is described using a Device Tree–like syntax (also known as .its — Image Tree Source).

Here’s a simplified example:

/dts-v1/;

/ {
description = "My FIT Image";
images {
kernel {
description = "Linux Kernel";
data = /incbin/("zImage");
type = "kernel";
arch = "arm";
os = "linux";
compression = "none";
load = <0x8000>;
entry = <0x8000>;
};

fdt {
description = "Device Tree Blob";
data = /incbin/("myboard.dtb");
type = "flat_dt";
arch = "arm";
compression = "none";
};
};

configurations {
default = "config1";
config1 {
kernel = "kernel";
fdt = "fdt";
};
};
};

🛠️ How to Create a FIT Image

You can generate a FIT image using mkimage, a U-Boot utility tool.

Here’s the typical flow:

# Step 1: Create your ITS description file (fit.its)
# Step 2: Generate the FIT image
mkimage -f fit.its fitImage

This will create a fitImage — your single packaged binary ready to be flashed or booted by U-Boot.

Then, in U-Boot:

setenv bootfile fitImage
load mmc 0:1 ${loadaddr} ${bootfile}
bootm ${loadaddr}

And you’re done — U-Boot parses the image, picks the right configuration, and boots Linux seamlessly.


⚡ FIT Image vs. Legacy Image — Quick Comparison

FeatureLegacy uImageFIT Image
Single file supportNoYes
Multiple configurationsNoYes
Signature verificationNoYes
DTB inclusionExternalEmbedded
Boot simplicityManual setupAuto selection
Update managementMulti-fileSingle file

🧩 Where You’ll Encounter FIT Images

You’ll often find FIT images in:

  • Modern development boards (like LuckFox Mini, BeaglePlay, and i.MX8 platforms)
  • Yocto-based builds where FIT is integrated into kernel-fitimage.bbclass
  • Production-grade embedded products that require secure or OTA updates

FIT images are becoming the default standard for modern boot setups — for their modularity, security, and convenience.


🎓 Want to Go Beyond FIT Images?

If you’re fascinated by how FIT ties into the broader Embedded Linux boot flow — from bootloaders to kernel and root filesystem — then you’ll love the Embedded Linux Porting Hacks Course.

This hands-on program helps you build a solid foundation in Embedded Linux by covering:
✅ Booting up the board
✅ Recovering a bricked system
✅ Understanding U-Boot bootloader internals
✅ Configuring & building Linux images
✅ Using build systems like Buildroot & Yocto

Every concept comes with practical exercises to help you truly get how Linux boots and runs on embedded platforms.

👉 Explore the course here: https://embitude.in/elph/

💌 Stay Connected with Our Embedded Linux Community

We regularly share practical insights, blog updates, and hands-on challenges for embedded engineers who love getting closer to the kernel.

Join our growing community here 👇
🔗 https://embitudeinfotech.graphy.com/s/community

🧭 Wrapping Up

FIT images represent the evolution of embedded boot management — moving from scattered binaries to a structured, secure, and scalable approach.

Whether you’re exploring boards like the LuckFox Mini A or building your own embedded product, understanding FIT is a must-have skill for any Linux engineer.

In upcoming blogs, we’ll continue exploring more such porting hacks and kernel concepts that form the foundation of a robust embedded system. Stay tuned!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top