Generating bootfs file for Tezi image

Hi,

I currently have the following hardware:
. Verdin iMX8M Plus Quad 8GB WB IT V1.1A
. Dahlia Carrier board v1.1

I understand that Buildroot is not officially supported, but I’d appreciate your guidance on creating a Toradex Easy Installer (Tezi) image using output files generated from a Buildroot-based system.
I’ve configured Buildroot for the Verdin iMX8MP SOM on the Dahlia carrier board and successfully built the system. The relevant output files I currently have include:
Image, bl31.bin, ddr_fw.bin, flash.bin, install.tar, kernel.tar, rootfs.ext2, rootfs.ext4, rootfs.tar, u-boot-spl.bin, .u-boot.bin and imx8mp-verdin-wifi-dahlia.dtb.

Based on one of your reference images (Verdin-iMX8MP_Reference-Multimedia-Image-Tezi_7.2.0+build.5) I understand that the Tezi image should contain at least the following:

. image.json (I plan to reuse or adapt the one from the reference image)
. rootfs.tar.xz
. bootfs.tar.xz
. imx-boot (which I understand can be obtained from flash.bin)

So, I have two questions:

  1. How should I create ‘bootfs.tar.xz’?
    From what I understand, the process involves:

    • Writing a ‘boot.cmd’ file with appropriate U-Boot commands.
    • Converting it into a ‘boot.scr’ using ‘mkimage’.
    • Creating a FAT-formatted folder with ‘boot.scr’, ‘Image’, and the DTB.
    • Archiving that folder as ‘bootfs.tar.xz’.
      Could you confirm if this is correct?
      If possible, could you provide a sample boot.cmd suitable for the Verdin iMX8MP + Dahlia configuration?
  2. Do I need ‘u-boot-initial-env-sd’ as mentioned in ‘image.json’?
    Since I don’t plan to boot from an SD card, is this file required at all?
    If so, is there a way to generate an environment file tailored for eMMC boot, or can this field be safely omitted?

I appreciate any guidance you can provide on the above points.
Best regards,
Rodrigo

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


Hello Rodrigo,

Thank you for your detailed questions! Let’s address your concerns step by step for integrating your Buildroot output into a Toradex Easy Installer (Tezi) image for the Verdin iMX8M Plus and Dahlia Carrier Board.


1) Creating bootfs.tar.xz from Buildroot Outputs

Your understanding is correct. The general process to prepare bootfs.tar.xz is:

  1. Create a boot.cmd file with the required U-Boot commands.
  2. Convert boot.cmd to boot.scr using the mkimage tool from U-Boot.
  3. Assemble a folder (usually simply called boot/) containing:
    • boot.scr (the compiled boot script)
    • Image (your kernel)
    • The relevant DTB file(s), e.g., imx8mp-verdin-wifi-dahlia.dtb
    • Any other artifacts you need at boot (initramfs, overlays, etc.)
  4. Archive this folder as bootfs.tar.xz.

Sample boot.cmd for Verdin iMX8M Plus + Dahlia:

# Set display and console parameters; adjust as per your specific requirements
setenv bootargs console=ttymxc0,115200 quiet video=mxcfb0:dev=lcd,FusionF07A,if=RGB666 rootfstype=ext4 root=/dev/mmcblk0p2 ${teziargs}

setenv fdt_high

# Load Linux image (FIT or raw zImage)
load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ${prefix}Image

# Load device tree
load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}imx8mp-verdin-wifi-dahlia.dtb

# Boot Linux
booti ${kernel_addr_r} - ${fdt_addr_r}

You might need to adjust root=/dev/mmcblk0p2 and the DTB filename if your partition or naming scheme is different.
Convert boot.cmd to boot.scr:

mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro boot script" -d boot.cmd boot.scr

Folder Structure Example:

boot/
 ├─ boot.scr
 ├─ Image
 └─ imx8mp-verdin-wifi-dahlia.dtb

Create the compressed archive:

tar -cJf bootfs.tar.xz -C boot .

You’ll end up with bootfs.tar.xz ready to include in your Tezi image.

Documentation for custom boot scripting and bootfs creation:


2) Do you need a u-boot-initial-env-sd or similar file?

The u_boot_env property in the image.json is optional.

  • If you do not need to override any U-Boot environment variables (such as bootargs or boot device), you can omit this property and the corresponding file.
  • If you want a custom U-Boot environment, you can generate a file containing the full environment. However, for typical eMMC boot scenarios, this is not required.

More info:


Additional Tip: Speed

For local media installation (e.g., via USB or SD card), using uncompressed tar files can speed up the flashing process dramatically (up to 3x faster), if this is important for your use case:


If you have further questions or need more examples (such as a sample image.json), just let me know!

Best regards,
Toradex AI Assistant.

Thanks, I was able to generate the ‘bootfs.tar’ (though I still need to verify that it’s correct). However, I’m now running into an issue with ‘imx-boot’.

I had initially assumed that the ‘flash.bin’ file generated by Buildroot was the same as ‘imx-boot’, and that I only needed to rename it. But after installing the TEZI image using the Toradex Easy Installer (from an SD card), the board seems to get stuck at the SPL stage during boot—well before the ARM Trusted Firmware is loaded:

U-Boot SPL 2025.01 (Jun 19 2025 - 12:22:50 +1000)
DDR configured as dual rank
WDT: Started watchdog @30280000 with servicing every 1000ms (60s timeout)
SECO: RNG instantiated
Normal Boot
Trying to boot from BOOTROM
Boot Stage: Primary boot
Find img info 0x4802ee00, size 1116
Need continue download 1024

Then the system resets due to the watchdog timer and enters a reboot loop.

This makes me think my assumption about ‘flash.bin’ being equivalent to ‘imx-boot’ might be incorrect. If that’s the case, what is the proper way to generate the correct ‘imx-boot’ for the Verdin iMX8MP?

Thank you.

Hi @rodring10 , it is upstream U-boot v2024.07 for our Yocto-based Linux BSP V7. You can follow the guide to build it.
Just as you find out that U-Boot SPL 2025.01 from Buildroot doesn’t work on Verdin iMX8MP, the Linux kernel and rootfs may also not work. In Yocto, parts of the source codes are fetched from Toradex repos, e.g. linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules and meta-toradex-nxp.git - Toradex BSP layer, recipes for NXP based modules. And they are customized to Verdin iMX8MP hardware.