Cannot find the flattened dts file after installing an easy installer

I am doing a full build with directives in the tbbuild.yaml file. Everything was working until I tried to get the container bundle to work. Finally got that working, but then the combine wouldn’t work. I checked all the things and it appears it is in the build, but then the device wouldn’t boot, because it says it can’t find the device tree. I didn’t change anything other than the suggestions of the AI to change the formatting of the tcbuild directory. Through the verbose output it appears to compile and build the device tree file, but it doesn’t show up when it tries to find it during the boot process.

=> Adding device-tree overlay ‘device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts’
2026-07-29 17:07:21,231 - torizon.tcbuilder.backend.kernel - DEBUG - Kernel found at ‘/storage/sysroot/ostree/deploy/torizon/deploy/80078437b2cf6070717a424bb28982cf447621e93400c560da5877b89724635b.0/usr/lib/modules/6.6.94-7.3.0-g5a62539de8f9/vmlinuz’
2026-07-29 17:07:21,231 - torizon.tcbuilder.cli.dto - DEBUG - dto_apply: kernel_is_fit=False
2026-07-29 17:07:21,258 - torizon.tcbuilder.backend.dto - DEBUG - Found overlays.txt in changes dir: ‘/storage/dt/usr/lib/modules/6.6.94-7.3.0-g5a62539de8f9/dtb/overlays.txt’
2026-07-29 17:07:21,279 - torizon.tcbuilder.backend.dt - INFO - Compiling Device Tree with DTC 1.6.0…
2026-07-29 17:07:21,314 - torizon.tcbuilder.backend.dt - DEBUG - OUTPUT FROM DEVICE TREE COMPILER
2026-07-29 17:07:21,315 - torizon.tcbuilder.backend.dt - DEBUG - device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts:111.21-31: Warning (reg_format): /fragment@43/overlay/mdio/ethernet-phy@7:reg: property has invalid length (4 bytes) (#address-cells == 2, #size-cells == 1)
/tmp/tmp4smk5qbm.dtbo: Warning (pci_device_reg): Failed prerequisite ‘reg_format’
/tmp/tmp4smk5qbm.dtbo: Warning (pci_device_bus_num): Failed prerequisite ‘reg_format’
/tmp/tmp4smk5qbm.dtbo: Warning (simple_bus_reg): Failed prerequisite ‘reg_format’
/tmp/tmp4smk5qbm.dtbo: Warning (i2c_bus_reg): Failed prerequisite ‘reg_format’
/tmp/tmp4smk5qbm.dtbo: Warning (spi_bus_reg): Failed prerequisite ‘reg_format’
device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts:110.32-113.19: Warning (avoid_default_addr_size): /fragment@43/overlay/mdio/ethernet-phy@7: Relying on default #address-cells value
device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts:110.32-113.19: Warning (avoid_default_addr_size): /fragment@43/overlay/mdio/ethernet-phy@7: Relying on default #size-cells value
/tmp/tmp4smk5qbm.dtbo: Warning (avoid_unnecessary_addr_size): Failed prerequisite ‘avoid_default_addr_size’
/tmp/tmp4smk5qbm.dtbo: Warning (unique_unit_address): Failed prerequisite ‘avoid_default_addr_size’

2026-07-29 17:07:21,315 - torizon.tcbuilder.backend.dt - DEBUG - END OF DEVICE TREE COMPILER OUTPUT
2026-07-29 17:07:21,315 - torizon.tcbuilder.backend.dt - INFO - File ‘verdin-imx8mp-gimbal3b-overlay.dts’ compiles successfully.
2026-07-29 17:07:21,343 - torizon.tcbuilder.backend.dto - DEBUG - Setting overlay list in ‘overlays.txt’ to [‘verdin-imx8mp-gimbal3b-overlay.dtbo’]
2026-07-29 17:07:21,372 - torizon.tcbuilder.cli.dto - INFO - Overlay verdin-imx8mp-gimbal3b-overlay.dtbo successfully applied.
2026-07-29 17:07:21,372 - torizon.tcbuilder.cli.build - INFO -

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


To help troubleshoot your device tree overlay issue, could you clarify which exact version of Torizon OS you’re running? You can check this using the tdx-info command on your device. More details are available at tdx-info documentation.

From your build log, I can see the overlay is compiling successfully, but there are some warnings about the reg property format in your MDIO/ethernet-phy node. While these are warnings (not errors), they might indicate a device tree structure issue.

A few things to check:

  1. Verify the overlay is in the correct location: After building, the overlay should be at /usr/lib/modules/6.6.94-7.3.0-g5a62539de8f9/dtb/overlays/verdin-imx8mp-gimbal3b-overlay.dtbo(1)

  2. Check the overlays.txt file: Ensure it correctly references your overlay. The log shows it’s being set to ['verdin-imx8mp-gimbal3b-overlay.dtbo'](1)

  3. Verify the base device tree: When the device boots and says it “can’t find the device tree,” it might be looking for the base device tree file, not the overlay. Check your tcbuild.yaml to ensure you’ve specified the correct base device tree in the customization: device-tree: custom: section(1)

  4. Check for boot errors: Connect via serial console to see the exact error message during boot. This will tell you whether it’s the base device tree or the overlay that’s missing(2)

Could you share:

  • Your tcbuild.yaml configuration (especially the device-tree: section)
  • The exact boot error message you’re seeing
  • The Torizon OS version you’re using

This will help pinpoint whether the issue is with the base device tree path, the overlay application, or something else in the build process.

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

@ToradexAI
I can’t verify files or run tdx-info because it doesn’t boot into linux. It just has a command prompt of Verdin iMXMP #

If your device is stuck at the U-Boot prompt (Verdin iMX8MP #) and not booting into Linux, this indicates the bootloader cannot find or load the device tree file. This is a critical boot failure.

Immediate Troubleshooting Steps

1. Check U-Boot Environment Variables

At the U-Boot prompt, check which device tree file U-Boot is trying to load:

printenv fdtfile

This will show you the expected device tree filename(1).

2. List Available Device Trees

Check what device tree files are actually present:

ls mmc 0:1 /boot

or

ls mmc 1:1 /boot

This will list files in the boot partition. Look for .dtb files(1).

3. Bypass Overlays Temporarily

If overlays are causing the boot failure, you can skip them:

setenv skip_fdt_overlays 1
boot

This will attempt to boot without applying any overlays(2).

Root Cause Analysis

Based on your build log, the issue is likely one of these:

A. Base Device Tree Not Specified Correctly

Your tcbuild.yaml must specify the correct base device tree file in the customization: device-tree: custom: section. For Verdin iMX8M Plus with Dahlia carrier board, it should look like:

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi-dahlia.dts
    overlays:
      add:
        - device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts

(1)(2)

B. Device Tree File Missing from Output

The build process should compile your custom device tree and place it in the output image. If the base .dts file path is incorrect or missing from your tcbuild.yaml, the compiled .dtb won’t be in the image(1).

What to Check in Your tcbuild.yaml

Please share your complete tcbuild.yaml file, specifically:

  1. The customization: device-tree: custom: line - does it point to the correct base device tree source file?
  2. The customization: device-tree: include-dirs: section - does it include the necessary header directories?

The correct structure should be:

input:
  easy-installer:
    local: torizon-docker-verdin-imx8mp-Tezi_7.x.x+build.xx

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi-dahlia.dts
    overlays:
      add:
        - device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts

output:
  easy-installer:
    local: custom-torizon-verdin-imx8mp

(1)(2)

Additional Notes

The warnings in your device tree compiler output about the MDIO ethernet-phy node suggest there may be an issue with the reg property format in your overlay at line 111. While these are warnings (not errors), fixing them is recommended(3).

Could you share your tcbuild.yaml file so we can verify the base device tree configuration?

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

@ToradexAI

OK, I can boot using this and it finds a flattened Device tree at 0x50200000, which it loads just fine.
Right now I have no Overlays, as I removed all using the
overlays:
clear: true
and I am not adding any at this point.
Why is it saying it can’t find the flattened device tree, when it is obviously there?

Steve

Good news that you can boot with skip_fdt_overlays=1 and the device tree loads at 0x50200000. This tells us the base device tree is present and working(1).

The fact that it boots successfully when skipping overlays but fails otherwise suggests the issue is specifically with how overlays are being applied or referenced, not with the base device tree itself.

What’s Likely Happening

When you had overlays configured (before clearing them), the system was trying to apply overlays but encountering an issue. Even though you’ve now cleared the overlays with overlays: clear: true, there might be residual configuration causing problems(1).

Diagnostic Steps

1. Check the overlays.txt file

When the device boots successfully (with skip_fdt_overlays=1), check what’s in the overlays configuration:

cat /sysroot/boot/ostree/torizon-*/dtb/overlays.txt

This file should either be empty or not exist if you’ve cleared all overlays(1).

2. Verify U-Boot Environment

At the U-Boot prompt, check if there are any overlay-related environment variables set:

printenv fdt_overlays
printenv overlays_file

These should be empty or unset if no overlays are configured(1).

3. Check Your tcbuild.yaml

Your current configuration should look like:

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi-dahlia.dts
    overlays:
      clear: true

(1)

Rebuild and Redeploy

Since you’ve changed the overlay configuration, you need to rebuild and redeploy the image:

torizoncore-builder build

Then deploy the newly built image using Toradex Easy Installer(2)(1).

Why the Error Occurs

The “can’t find the flattened device tree” error when overlays are involved typically means:

  1. The system is looking for an overlay file that doesn’t exist
  2. The overlays.txt file references a non-existent .dtbo file
  3. There’s a mismatch between what U-Boot expects and what’s actually in the boot partition

Since the base device tree is present (proven by successful boot with skip_fdt_overlays=1), the issue is definitely overlay-related(1).

Next Steps

Could you:

  1. Share your complete current tcbuild.yaml file
  2. After booting with skip_fdt_overlays=1, run: cat /sysroot/boot/ostree/torizon-*/dtb/overlays.txt and share the output
  3. Confirm whether you rebuilt and redeployed the image after adding overlays: clear: true

This will help identify if there’s residual overlay configuration causing the boot failure.

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

@ToradexAI

Yes, this has my original overlay which when I restarted the build process from the beginning. So, the system wouldn’t let my overlay work as it said it could not apply it. So I redid the “unpack” on the tar file and then redid the build.
There is no overlay file, but the name is still showing up in the overlays.txt file. How do I get rid of that?
My build file is exactly what you have there previously, except I am using the verdin version:
torizon-docker-verdin-imx8mp-Tezi_7.3.0+build.18.tar
I have my own dts file, but currently it is just the same as the torizon non-wifi dev dts, as my board is based off the dev board, just to make things faster and easier to get up and running.
Apparently, the clear is not deleting the overlays.txt file, and for some reason it is continuing to put the old overlay file in it. I need some way to delete the overlays.txt file in the build.

The issue is clear: the overlays.txt file still contains a reference to your old overlay even though the overlay file itself doesn’t exist. This is why boot fails - U-Boot tries to apply an overlay that isn’t there(1).

How to Fix This

You need to explicitly clear the overlays in your tcbuild.yaml before building. Here’s the correct configuration:

input:
  easy-installer:
    local: torizon-docker-verdin-imx8mp-Tezi_7.3.0+build.18.tar

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi-dev.dts
    overlays:
      clear: true

output:
  easy-installer:
    local: custom-torizon-verdin-imx8mp

(1)

Important: Clean Build Process

Since you’ve unpacked the tar file again, follow these steps carefully:

  1. Delete any existing storage directory from previous builds:
rm -rf storage/
  1. Unpack the base image fresh:
torizoncore-builder images unpack torizon-docker-verdin-imx8mp-Tezi_7.3.0+build.18.tar

(1)

  1. Build with the cleared overlays:
torizoncore-builder build

(1)

  1. Deploy the new image via Toradex Easy Installer(1)

Why This Happens

When you unpack an image, if there’s already a storage/ directory from a previous build, TorizonCore Builder may preserve some state - including the old overlays.txt content. The overlays: clear: true directive tells the builder to explicitly empty the overlay list, which should write an empty or non-existent overlays.txt file(1).

Verification After Boot

Once you deploy and boot successfully, verify the overlays are cleared:

cat /sysroot/boot/ostree/torizon-*/dtb/overlays.txt

This should either show an empty file or the file should not exist(1).

Next Steps: Adding Your Overlay Back

Once you have a clean boot working with no overlays, you can add your overlay back properly:

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi-dev.dts
    overlays:
      add:
        - device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts

(1)

But first, let’s get a clean boot with no overlays to establish a working baseline.

Try the clean build process above and let me know if the device boots successfully.

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

The clean process did not work. Additionally, when I did the unpack after running ‘rm -rf storage’, it says “Delete the current image before continuing?” I always answer yes to this.
is the “changes”, creating a file that has this? The build is still applying the “changes” I have created. I don’t see it in any of the files in my “changes” directory.
Where else could be bringing this in?
I moved the overlays.txt to another name, and rebooted. It boots just fine now.
However, I need to figure out a way to do this with the build.

@ToradexAI
I had an SD card that was on the board and it apparently had some an old build. Apparently, it looks at the SDCard before it looks at the USB drive.


Great troubleshooting! You’ve identified the root cause - Toradex Easy Installer was booting from the SD card instead of the USB drive, which contained your old build with the problematic overlays.txt file(1).

Boot Order in Toradex Easy Installer

Toradex Easy Installer does prioritize removable media in a specific order. The SD card typically has higher priority than USB storage in the boot sequence, which is why it loaded your old image instead of the new one from the USB drive(1).

Solution Going Forward

Now that you’ve removed the SD card and can boot successfully, here’s how to proceed with your build:

1. For a Clean Build with No Overlays

Your tcbuild.yaml should look like this:

input:
  easy-installer:
    local: torizon-docker-verdin-imx8mp-Tezi_7.3.0+build.18.tar

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi-dev.dts
    overlays:
      clear: true

output:
  easy-installer:
    local: custom-torizon-verdin-imx8mp

(2)(1)

2. When Adding Your Overlay Back

Once you’re ready to add your overlay:

customization:
  device-tree:
    include-dirs:
      - linux/include
      - linux/arch/arm64/boot/dts/freescale/
    custom: linux/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi-dev.dts
    overlays:
      add:
        - device-trees/overlays/verdin-imx8mp-gimbal3b-overlay.dts

(2)(1)

3. About the “changes” Directory

The changes directory you mentioned is used by TorizonCore Builder to store filesystem modifications when using the isolate command. If you have an overlays.txt file in your changes directory, it would be applied during the build process(2).

Check if there’s an overlays.txt file in your changes:

find changes/ -name "overlays.txt"

If found, remove it before building.

Best Practices

  • Always remove SD cards during Easy Installer deployment to avoid boot confusion
  • Use rm -rf storage/ before unpacking a new base image to ensure a clean state(1)
  • Verify your output by checking the generated Easy Installer image directory before deployment

Your build process should now work correctly with the SD card removed and a clean storage directory.

Best regards,
Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Hi @EvetsMostel1!

Can I consider this issue resolved?

Best regards.

@lucas_az.tx

Yes, you can.