FitImage
03 03, 2026 11:14
FitImage on i.MX 8M Plus
Starting with the BSP-Yocto-NXP-i.MX8MP-PD24.1.0 release, the Kernel, Device Tree and Device Tree Overlays are now stored and loaded in a fitImage Container. This represents a significant architectural change in how PHYTEC's i.MX 8M Plus BSP handles boot images.
More information about Yocto changes at PD24.1.0 can be found here.
Image Types
| Feature | fitImage | WIC-Image | PARTUP Image |
|---|---|---|---|
| Purpose | Boot container | Complete disk image | Complete disk image |
| Contains | Kernel; DTB; DTBOs | Bootloader; Kernel; RootFS | Bootloader; Kernel; RootFS |
| Use Case | Boot process; During Boot | Initial SD/eMMC flashing; Initial Development | Initial SD/eMMC flashing; Production Deployment |
| File Extension | .itb at Kernel; Yocto: part of *.bin | .wic.xz (compressed) .wic (uncompressed) | .partup |
| Introduction | PD24.1.0 | Traditional method | PD23.1.0 |
| Ease of Use | Automatic (used by bootloader) | Requires dd/bmaptool | Single command install |
| Partition Optimization | N/A | Fixed partitions | Auto-adjusts to device capacity |
| Benefits | unified container for boot components; enhanced security through signature verification; Better integration with modern bootflow standards |
When to use each
fitImage
You don't directly interact with it - it's automatically created and used during the build and boot process. Starting from PD24.1.0, your kernel and device tree are packaged this way.
The auto-generated ITS from kernel-fitimage should generally not be modified manually (“Do not touch the its!”); adjustments are made via Yocto variables and recipes, not by directly editing the ITS in the deploy directory.
WIC Image
Used for initial SD/eMMC setup and if you need precise control over partition layout. It can be flashed from U-Boot with mmc write.
host:~$xz -dc phytec-qt5demo-image-phyboard-pollux-imx8mp-2.wic.xz | sudo dd of=/dev/sdX bs=8192 conv=fsync
host:~$ sudo bmaptool copy phytec-qt5demo-image-phyboard-pollux-imx8mp-2.wic.xz /dev/sdX
For detailed information about *wic image flashing visit BSP Manual (L-1017e.A2) - Flash e.MMC from SD card.
Partup
Quick and easy eMMC flashing from Linux. Also automatic partition optimization is present and it is perfect for production programming scenarios. You can also remote flash it via ssh.
target:~$ partup install phytec-qt5demo-image-phyboard-pollux-imx8mp-2.rootfs.partup /dev/mmcblk2
host:~$ ssh root@<target-ip> "partup install phytec-qt5demo-image-phyboard-pollux-imx8mp-2.rootfs.partup /dev/mmcblk2"
You can find a detailed description at BSP Manual (L.1017e.A2) - Flash e.MMC from SD card in Linux on Target.
fitImage Build Example
To add a fitImage recipe in your BSP layer (e.g., recipes-images/fitimage/), you can reference example recipes in the meta-yogurt/meta-ampliphy layers, including phytec-simple-fitimage.bb for a fitImage with kernel and device tree, or phytec-secureboot-ramdisk-fitimage.bb for fitImage with kernel, device tree, and ramdisk with file encryption support.
To create a fitImage during the build process you need to inherit the fitImage class in your build configuration and specify variables like FITIMAGE_SLOTS.
fitImage Build Example for i.MX8MP Pollux
Hardware: phyBOARD-Pollux i.MX 8M Plus
BSP: BSP-Yocto-NXP-i.MX8MP-PD24.1.0
U-Boot: v2024-2.0.0-phy7
Linux: NXP Vendor Kernel v6.6.23-2.0.0-phy10
Yocto: 5.0.4 (Scathgap)
Hostsystem: Ubuntu 20.04 64-bit
Get the BSP
Visit the BSP Manual (L-1017e.A2) - phyLinux documentation and follow the instructions.
Ensure that you have performed the necessary host configurations (e.g., Git configurations). You can find these in the BSP documentation as well.
Create a fitImage Recipe
First, add a FIT-Image recipe in your BSP layer (e.g., recipes-images/fitimage/). You can find example recipes in the meta-yogurt layer at yocto/source/meta-yogurt/recipes-images/fitimage/, including phytec-simple-fitimage.bb for a fit-image with kernel and device tree.
Basic fitImage Recipe Structure
Create a file recipes-images/fitimage/my-fitimage.bb:
# Basic FitImage recipe for phyBOARD-Pollux i.MX8MP SUMMARY = "FitImage recipe for phyBOARD-Pollux i.MX8MP" LICENSE = "MIT" # Inherit the FitImage class inherit fitimage # Specify the target machine COMPATIBLE_MACHINE = "phyboard-pollux-imx8mp-2" # Define FitImage slots (kernel and device tree) FITIMAGE_SLOTS = "kernel fdt" # Specify which recipes provide the artifacts FITIMAGE_SLOT_kernel = "virtual/kernel" FITIMAGE_SLOT_kernel[type] = "kernel" FITIMAGE_SLOT_fdt = "virtual/kernel" FITIMAGE_SLOT_fdt[type] = "fdt"
Build configuration
To create a fitImage during the build process you need to inherit the fitImage class in your build configuration.
Add to your conf/local.conf:
# Enable FitImage build MACHINE = "phyboard-pollux-imx8mp-2" # Optional: Specify FitImage variables FITIMAGE_SLOTS = "kernel fdt"
Build fitImage
Initialize your build environment and build:
# Navigate to your BSP directory cd ~/BSP-Yocto-NXP-i.MX8MP-PD24.1.0 # Source the environment source sources/poky/oe-init-build-env # Set your machine if not already set echo 'MACHINE = "phyboard-pollux-imx8mp-2"' >> conf/local.conf # Build your custom FitImage bitbake my-fitimage # Or build the default image which includes FitImage bitbake phytec-qt5demo-image
Key Variables for fitImage Creation
Use FITIMAGE_SLOTS to list all slot classes for which the fitImage should contain images. A value of "kernel fdt", for example, will create a manifest with images for two slot classes - kernel and devicetree. For each slot class, set FITIMAGE_SLOT_<slotclass> to the image (recipe) name which builds the artifact, and FITIMAGE_SLOT_<slotclass>[type] to the type of image you intend to place in this slot.
Deployment
All images generated by Bitbake are deployed to ~/yocto/build/deploy/images/phyboard-pollux-imx8mp-2/.
Your fitImage will be available in the deployment directory along with other boot artifacts.
For i.MX8MP images, the fitImage is always integrated into WIC or Partup images via the image recipe (e.g., phytec-qt6demo-image) or part of the *.bin . Simply copying it manually into the root file system is not sufficient unless the bootloader has been configured accordingly.
Create a fitImage at kernel
You can also create a fitImage without a Yocto recipe. This shows how to create a fitImage with a standalone kernel: BSP-Yocto-NXP-i.MX8MP-PD24.1.0 - Kernel standalone build
Benefit of the fitImage
Advantage of fitImage
- Flexibility
- Several hardware configurations can be build together
- Security
- Signature for all components
- Structured metadata
- Save metadata for all components
- Standardization
- Distributions and tools such as Yocto and U-Boot rely on this format
When not to use
The system is extremely simple
a single kernel, one DTB, no overlays, no secure boot
The bootloader or the existing boot ROM setup does not support fitImage
The available boot flash (e.g., a small SPI‑NOR) is too limited to hold the fitImage
multiple FDTs, overlays, and signatures within the FIT container
For more detailed information about these image types and deployment strategies, I recommend:
- Checking the BSP Manual (L-1017e.A2) on our wiki
- Reviewing release notes at https://download.phytec.de/Software/Linux/BSP-Yocto-i.MX8MP/
- Contacting our support team at support@phytec.de