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 (
zImageorImage) - 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
| Feature | Legacy uImage | FIT Image |
|---|---|---|
| Single file support | No | Yes |
| Multiple configurations | No | Yes |
| Signature verification | No | Yes |
| DTB inclusion | External | Embedded |
| Boot simplicity | Manual setup | Auto selection |
| Update management | Multi-file | Single 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!