Steps to Configure Yocto Build for a Custom Verdin AM62 Carrier Board

Hi community,

I have built a Yocto image using MACHINE = "verdin-am62" for the Verdin AM62 SoM. After flashing and booting the image, I noticed that the system identifies the board as “Verdin Development Board” in dmesg

However, I am designing my own custom carrier board for this SoM, and I want to fully adapt the image to reflect that. Specifically, I want to:

  • Change the board name shown in dmesg to something like "Myname Custom Carrier Board"
  • Modify the device tree to match my board’s hardware (GPIOs, peripherals, etc.)
  • Ensure that the system uses this custom device tree during boot
  • Understand if there are any additional steps in U-Boot or Yocto metadata to cleanly support a custom carrier board

I’m using the Toradex Yocto-based BSP (reference multimedia image), and I’m open to creating a new .dts and even a new layer if necessary.

Could you please provide a step-by-step guide or best practices for this process?

Thanks in advance!

Best regards!
Uday

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 Uday,

Thank you for your detailed question! Adapting your Yocto image and device tree to support a custom carrier board and custom board identification for the Verdin AM62 module is an excellent way to make your build truly your own. Below is a step-by-step guide covering all your points:


1. Creating a Custom Yocto Meta Layer for Your Board

This helps keep your changes organized and maintainable. From your Yocto build directory:

cd ../../build/
. export
bitbake-layers create-layer ../layers/meta-myname

Add your new layer to conf/bblayers.conf:

${TOPDIR}/../layers/meta-myname \

More on custom meta layers


2. Creating and Modifying Your Custom Device Tree

Start by copying an existing base device tree (such as verdin-am62_dev.dts) from the Toradex BSP:

  • In your new meta layer, create the directory structure:
    mkdir -p ../layers/meta-myname/recipes-kernel/linux/linux-toradex/
    
  • Add your new .dts in ../layers/meta-myname/recipes-kernel/linux/linux-toradex/.
  • Change the board compatible and model strings:
    / {
        model = "Myname Custom Carrier Board";
        compatible = "myname,verdin-am62", "toradex,verdin-am62";
        // existing contents...
    };
    
    Modify hardware nodes (GPIOs, SPI, I2C, etc.) as needed for your design.

See this for Device Tree Overlays and DTO development


3. Integrating Your DTS into the Yocto Build

Create a .bbappend file in meta-myname/recipes-kernel/linux/ (e.g., linux-toradex_%.bbappend):

FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"

SRC_URI += "file://myname-custom-board.dts"

Make sure to instruct Yocto to build and use your new device tree by updating the relevant variables or patching KERNEL_DEVICETREE in your layer or adding through local.conf.


4. Ensuring the System Uses the Correct Device Tree

  • Ensure your .dtb file is deployed in /boot of your image.
  • Update U-Boot’s fdtfile variable to point to your custom .dtb. For example, in U-Boot:
    setenv fdtfile myname-custom-board.dtb
    saveenv
    

You can also use Yocto to set the default fdtfile by customizing the U-Boot environment in your layer:

U-Boot environment variable reference


5. Other Tips & Best Practices

  • Add your meta-myname layer to version control (git init in the layer directory is mandatory).
  • For testing, you can first deploy your device tree as a device tree overlay to validate changes before a full board-specific device tree integration.

Summary:

  • Create a new meta layer for your board.
  • Add your layer to bblayers.conf.
  • Copy and customize your device tree, setting a custom model.
  • bbappend or patch kernel recipes as needed.
  • Set U-Boot’s fdtfile to your new device tree.
  • Test overlays before full integration if needed.

Let me know if you need more details on any individual step or example device tree snippets!

Best regards,
Toradex AI Assistant.

References:

Hi @Uday10122

The answer from ToradexAI seems to give some good overall steps.

Can you try following these steps and see if you need more help from the bot?

Hi @ToradexAI @allan.tx

I tried updating the fdtfile variable using the following commands:

setenv fdtfile myname-custom-board.dtb # Currently, I’m selecting other boards like non-wifi-mallow, since mine is mallow-only
saveenv

However, I’m encountering an error:
setenv: command not found

Could you please help me understand what I might be doing wrong or missing in the process?

Thanks in advance!

Best regards,
Uday

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

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


Hello Uday,

The error setenv: command not found usually happens when the setenv command is run in the Linux shell rather than in the U-Boot bootloader environment.

Here are the correct ways to update the fdtfile variable:

  1. Using fw_setenv from Linux
    If you are already in Linux, use the fw_setenv command:
fw_setenv fdtfile myname-custom-board.dtb

This updates the U-Boot environment variable from within Linux.
Make sure the /etc/fw_env.config file is correctly set up for your hardware. More info here:

  1. Using setenv in U-Boot
    If you want to use setenv, you need to interrupt the boot process and access the U-Boot console:
  • Power cycle your board and connect a serial console.
  • When prompted, press any key to stop boot at the U-Boot prompt.
  • At the prompt (usually something like =>), use:
setenv fdtfile myname-custom-board.dtb
saveenv

Reference:

You can now reboot (reset) the system, and U-Boot should use your custom fdtfile.

  1. Verifying the Change
    From Linux:
fw_printenv fdtfile

Or from U-Boot:

printenv fdtfile

Summary:

  • Use fw_setenv from Linux.
  • Use setenv from the U-Boot prompt, not from Linux.

Let me know if you need guidance on configuring /etc/fw_env.config or have any follow-up questions.

Best regards,
Toradex AI Assistant.

Reference URLs:

Hey, @Uday10122!

Did you manage to apply the device tree to your board? The previous answer from ToradexAI should work, let me know if you have any issues.

However, if you want your device tree to be applied automatically to your image (without having to manually set the environment variable on the device), you’ll need to do a bit more work.

Since you’re building our BSP using Yocto, you will need to compile your device tree along with it and also configure U-Boot in your Yocto build to use your custom device tree. You can find the complete instructions here. Let me know if you manage to deploy the device tree.

Additionally, if you’re in the early stages of your project, and you’re open to using Torizon OS, you can easily set the device tree of your image using TorizonCore Builder instead of Yocto. It can facilitate and accelerate customizing and maintaining your system. You can find instructions on basic usage of TorizonCore Builder here, and here is an example of setting the device tree using TorizonCore Builder.

Best regards,

Hi @ToradexAI @leonardo.costa.tx

Thanks a lot for the detailed explanation and suggestions!

I’ve already completed quite a bit of work using Yocto for my project, including integrating drivers and customizing recipes. So at this point, switching to TorizonCore would be difficult. I would prefer to continue with the Yocto-based BSP.

Before I move on to building and applying my own custom device tree, I want to clarify something basic:

From my current setup:

root@verdin-am62-15415775:/boot# ls
Image.gz k3-am625-verdin-nonwifi-dahlia.dtb
boot.scr k3-am625-verdin-nonwifi-dev.dtb
k3-am625-verdin-nonwifi-ivy.dtb k3-am625-verdin-nonwifi-mallow.dtb
k3-am625-verdin-nonwifi-yavia.dtb …

I can see multiple .dtb files, and right now the system seems to be applying:

k3-am625-verdin-nonwifi-dev.dtb

I can tell this from the dmesg output:

Toradex Verdin AM62 on Verdin Development Board

What I want is to apply:

k3-am625-verdin-nonwifi-mallow.dtb

so that after boot, the dmesg shows:

Toradex Verdin AM62 on Mallow Board

My questions are:

Which file or configuration decides which .dtb file gets applied at boot?

Where should I modify it in  Yocto to make k3-am625-verdin-nonwifi-mallow.dtb the default DTB file?

I want to make this permanent and not set it manually on each boot, what are the complete steps to do it properly in the Yocto build or U-Boot environment?

Once I confirm this basic step is working, my next goal will be to integrate my own custom .dtb file through the Yocto build.

and also using the command

fw_setenv fdtfile myname-custom-board.dtb

i can able to set mallow-non-wifi.dtb i can see in dmesg that

Toradex Verdin AM62 on Mallow Board

Thanks again for the guidance!

Best regards,
Uday

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

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


Hello Uday,

Great questions! Here’s a clear breakdown of how the device tree (.dtb) selected at boot is determined and how to make your choice permanent through Yocto and U-Boot.


1. Which File or Configuration Decides Which .dtb Gets Loaded?

The key variable is fdtfile in the U-Boot environment. At boot, U-Boot looks at the value of fdtfile and loads the corresponding .dtb file from /boot on your root filesystem.

  • Example: If fdtfile is set to k3-am625-verdin-nonwifi-mallow.dtb, then U-Boot loads /boot/k3-am625-verdin-nonwifi-mallow.dtb.

Reference:


2. How to Make k3-am625-verdin-nonwifi-mallow.dtb the Default via Yocto

To make this change permanent (so it persists after re-flashing or updating your device), you must ensure the default U-Boot environment has the correct fdtfile value at build time.

Approach: Provide a U-Boot environment configuration in your own Yocto layer.

Steps:

  1. Create a U-Boot environment text file
    In your custom Yocto layer (e.g., meta-myproject), add a file such as:

    recipes-bsp/u-boot/u-boot-myenv/uboot-initial-env
    

    and put this inside:

    fdtfile=k3-am625-verdin-nonwifi-mallow.dtb
    
  2. Add a bbappend for U-Boot
    Create a file:

    recipes-bsp/u-boot/u-boot-toradex_%.bbappend
    

    and ensure it contains a line to install your custom environment. For example:

    FILESEXTRAPATHS:prepend := "${THISDIR}/u-boot-myenv:"
    
    SRC_URI += "file://uboot-initial-env"
    
  3. Configure U-Boot to Use Your Custom Environment
    Most Toradex boards are set up to look for a default environment at build time. If you place your environment file in the expected location, Yocto will bake this into the U-Boot image, making it the default after flashing.

    Depending on your BSP version, you may need to override variables such as UBOOT_ENV or use a recipe snippet that copies uboot-initial-env to the right location.
    For details, check:
    Best Practices with U-Boot Environment Variables | Toradex Developer Center

  4. Rebuild and Deploy
    Rebuild your image with your meta-layer included in bblayers.conf.
    Flash the new image onto your board as usual.


3. Quick Alternative via Linux (For Testing Purposes Only)

If you want to change the DTB without rebuilding, you can do:

fw_setenv fdtfile k3-am625-verdin-nonwifi-mallow.dtb

(Requires fw_utils installed and /etc/fw_env.config set up.)
This is only stored in U-Boot’s persistent environment and might be wiped by a full reflash.

More details:


Summary Table

Method Persistent after reflash? Steps
Yocto/U-Boot env file YES As above
fw_setenv from Linux NO (lost on reflash) Simple command

Once you confirm this works, you can repeat the process for your custom .dtb!

Let me know if you’d like more specifics or a worked Yocto snippet.

Best regards,
Toradex AI Assistant.

References:

@ToradexAI @leonardo.costa.tx,

I’ve set up my custom layer as follows:

udaykumar@SYS-TK01:~/oe-core/layers$ tree meta-myproject/
meta-myproject/
├── conf
│ └── layer.conf
├── COPYING.MIT
├── README
└── recipes-bsp
└── u-boot
├── u-boot-myenv
│ └── uboot-initial-env
└── u-boot-toradex-ti_%.bbappend

In uboot-initial-env, I have:

fdtfile=k3-am625-verdin-nonwifi-mallow.dtb

And my u-boot-toradex-ti_%.bbappend contains:

FILESEXTRAPATHS:prepend := “${THISDIR}/u-boot-myenv:”

SRC_URI += “file://uboot-initial-env”

UBOOT_ENV = “uboot-initial-env”

However, I’m still encountering an error during the build.
If you have any working example or template for integrating a custom U-Boot environment file with the Verdin AM62, could you please share it?

Thank you!

Best regards,
Uday

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

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


Hello Uday,

Great job setting up your custom Yocto layer! For the Verdin AM62, the U-Boot recipe uses a slightly different naming scheme. You should rename your bbappend from:

u-boot-toradex-ti_%.bbappend

to:

u-boot-toradex_%.bbappend

Also, you do not need to explicitly set UBOOT_ENV in the bbappend. Instead, just add your uboot-initial-env to the SRC_URI and install it to the proper location. Here’s a working example for Verdin AM62:

Directory Structure

meta-myproject/
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-bsp
    └── u-boot
        ├── u-boot-myenv
        │   └── uboot-initial-env
        └── u-boot-toradex_%.bbappend

uboot-initial-env (example content):

fdtfile=k3-am625-verdin-nonwifi-mallow.dtb

u-boot-toradex_%.bbappend

FILESEXTRAPATHS:prepend := "${THISDIR}/u-boot-myenv:"

SRC_URI += "file://uboot-initial-env"

do_install:append() {
    install -d ${D}/${sysconfdir}
    install -m 0644 ${WORKDIR}/uboot-initial-env ${D}/${sysconfdir}/fw_env.config
}

Action Steps:

  1. Rename your bbappend to u-boot-toradex_%.bbappend.
  2. Use the above do_install snippet in that bbappend.
  3. Clean and rebuild U-Boot:
    bitbake -c clean u-boot-toradex
    bitbake u-boot-toradex
    
  4. Rebuild your image:
    bitbake <your-image-name>
    
  5. Flash the new image to your board.

This should integrate your custom U-Boot environment and apply your desired fdtfile setting.

Reference:

If you encounter a specific build error after these changes, please share the error message for more targeted help.

Best regards,
Toradex AI Assistant.


Further reading:

@ToradexAI

i tried that first i got this error
ERROR: Nothing PROVIDES ‘u-boot-toradex’
u-boot-toradex was skipped: incompatible with machine verdin-am62 (not in COMPATIBLE_MACHINE)
u-boot-toradex was skipped: incompatible with machine verdin-am62 (not in COMPATIBLE_MACHINE)
u-boot-toradex was skipped: PREFERRED_PROVIDER_virtual/bootloader set to u-boot-toradex-ti, not u-boot-toradex
u-boot-toradex was skipped: PREFERRED_PROVIDER_virtual/bootloader set to u-boot-toradex-ti, not u-boot-toradex

Summary: There was 1 ERROR message, returning a non-zero exit code.

so again i changed to " u-boot-toradex-ti_%.bbappend"

again got a error like this

Sstate summary: Wanted 165 Local 149 Mirrors 0 Missed 16 Current 1735 (90% match, 99% complete)############################################################################# | ETA: 0:00:00
Initialising tasks: 100% |###################################################################################################################################################################| Time: 0:00:02
NOTE: Executing Tasks
ERROR: mc:k3r5:u-boot-toradex-ti-1_2024.04+git-r0 do_compile: ExecutionError(‘/home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/temp/run.do_compile.59298’, 1, None, None)
ERROR: Logfile of failure stored in: /home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/temp/log.do_compile.59298
Log data follows:
| DEBUG: Executing shell function do_compile
| NOTE: make -j 12 CROSS_COMPILE=arm-tdx-eabi- CC=arm-tdx-eabi-gcc --sysroot=/home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/recipe-sysroot -fcanon-prefix-map -fmacro-prefix-map=/home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/git=/usr/src/debug/u-boot-toradex-ti/2024.04+git -fdebug-prefix-map=/home/udaykumar/

| make[1]: Leaving directory ‘/home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/build/verdin-am62_r5_defconfig’
| make: Leaving directory ‘/home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/git’
| ln: failed to create symbolic link ‘/home/udaykumar/oe-core/build/tmp-k3r5/work/verdin_am62_k3r5-tdx-eabi/u-boot-toradex-ti/2024.04+git/build/verdin-am62_r5_defconfig/u-boot-r5spl.bin’: File exists
| WARNING: exit code 1 from a shell command.
ERROR: Task (mc:k3r5:/home/udaykumar/oe-core/build/…/layers/meta-toradex-ti/recipes-bsp/u-boot/u-boot-toradex-ti_2024.04.bb:do_compile) failed with exit code ‘1’
NOTE: Tasks Summary: Attempted 4557 tasks of which 4550 didn’t need to be rerun and 1 failed.
NOTE: Writing buildhistory
NOTE: Writing buildhistory took: 3 seconds
NOTE: Writing buildhistory

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

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


Hello Uday,

Thank you for sharing the details and error messages. Let’s clarify and resolve the Yocto/U-Boot situation for the Verdin AM62:


1. Why Are There Two U-Boot Recipes?

  • verdin-am62 uses a multi-core boot:
    • u-boot-toradex-ti (“TI” variant): Builds U-Boot for both R5 and A53 cores.
    • u-boot-toradex: Not used for AM62.
    • The correct recipe and provider for your machine is u-boot-toradex-ti.

More info:


2. Required Yocto Directory & File Structure

For Verdin AM62, you MUST provide two bbappend files, like this:

meta-myproject/
└── recipes-bsp
    └── u-boot
        ├── u-boot-myenv
        │   └── uboot-initial-env
        ├── u-boot-toradex-ti_%.bbappend
        └── u-boot-toradex_%.bbappend

The u-boot-toradex-ti_%.bbappend is used for AM62, but due to Yocto’s build process for dual-core U-Boot, having both bbappends avoids certain build errors.


3. Example bbappend File for u-boot-toradex-ti

Put this in meta-myproject/recipes-bsp/u-boot/u-boot-toradex-ti_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/u-boot-myenv:"

SRC_URI += "file://uboot-initial-env"

Content of uboot-initial-env:

fdtfile=k3-am625-verdin-nonwifi-mallow.dtb

Leave u-boot-toradex_%.bbappend empty, but it has to exist.


4. Resolving the “failed to create symbolic link … File exists” Error

This error typically occurs if previous build artifacts exist for U-Boot.
Clean the state before rebuilding:

bitbake -c cleansstate u-boot-toradex-ti
bitbake -c cleansstate u-boot-toradex
bitbake u-boot-toradex-ti

Then rebuild your image as usual.


5. Summary of Steps

  1. Ensure BOTH bbappend files exist—even if one is empty.
  2. Put your custom environment in uboot-initial-env.
  3. Clean previous builds with -c cleansstate for both U-Boot providers.
  4. Build again.

6. References


Please adjust your project as described and let me know if you still encounter any issues or different error messages. If you have log file lines about “No space left” or different errors, please paste the relevant log portion.

Best regards,
Toradex AI Assistant.

@ToradexAI

udaykumar@SYS-TK01:~/oe-core/layers/meta-myproject/recipes-bsp/u-boot$ bitbake u-boot-toradex-ti
Loading cache: 100% |########################################################################################################################################################################| Time: 0:00:03
Loaded 10762 entries from dependency cache.
WARNING: /home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb: Exception during build_dependencies for fetcher_hashes_dummyfunc | ETA: --:–:–
WARNING: /home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb: Exception during build_dependencies for fetcher_hashes_dummyfunc
WARNING: /home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb: Error during finalise of /home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb
WARNING: /home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb: Error during finalise of mc:k3r5:/home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb
ERROR: ExpansionError during parsing /home/udaykumar/oe-core/build/…/layers/meta-toradex-bsp-common/recipes-bsp/u-boot/u-boot-toradex_mainline.bb
bb.data_smart.ExpansionError: Failure expanding variable fetcher_hashes_dummyfunc[vardepvalue], expression was ${@bb.fetch.get_hashvalue(d)} which triggered exception FetchError: Fetcher failure: Fetch command export PSEUDO_DISABLED=1; export DBUS_SESSION_BUS_ADDRESS=“unix:path=/run/user/1000/bus”; export SSH_AUTH_SOCK=“/run/user/1000/keyring/ssh”; export PATH=“/home/udaykumar/oe-core/build/tmp/sysroots-uninative/x86_64-linux/usr/bin:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot-native/usr/bin/python3-native:/home/udaykumar/oe-core/layers/openembedded-core/scripts:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot-native/usr/bin/aarch64-tdx-linux:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot/usr/bin/crossscripts:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot-native/usr/sbin:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot-native/usr/bin:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot-native/sbin:/home/udaykumar/oe-core/build/tmp/work/verdin_am62-tdx-linux/u-boot-toradex/mainline/recipe-sysroot-native/bin:/home/udaykumar/oe-core/layers/openembedded-core/bitbake/bin:/home/udaykumar/oe-core/build/tmp/hosttools”; export HOME=“/home/udaykumar”; git -c gc.autoDetach=false -c core.pager=cat -c safe.bareRepository=all ls-remote Making sure you're not a bot! failed with exit code 128, output:
remote: Retry later
fatal: unable to access ‘Making sure you're not a bot!’: The requested URL returned error: 429

The variable dependency chain for the failure is: fetcher_hashes_dummyfunc[vardepvalue]

ERROR: Parsing halted due to errors, see error messages above

Summary: There were 4 WARNING messages.
Summary: There were 2 ERROR messages, returning a non-zero exit code.
udaykumar@SYS-TK01:~/oe-core/layers/meta-myproject/recipes-bsp/u-boot$ ls

again got error like this

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

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


Hello Uday,

The error you are seeing is:

ERROR: ...unable to access ‘https://source.denx.de/u-boot/u-boot.git/’: The requested URL returned error: 429

This means the fetcher tried to download the U-Boot source code from the upstream repository but was rate-limited (“Too Many Requests” – HTTP 429 error).
This is a common transient issue when building Yocto or U-Boot and is not related to your meta-layer or bbappend.

How to resolve:

  1. Wait for a while before retrying. The server may be limiting requests from your IP for a short period.
  2. Clean up temp state and retry:
    bitbake -c cleansstate u-boot-toradex-ti
    rm -rf tmp/work/verdin_am62*/*boot*
    bitbake u-boot-toradex-ti
    
    This ensures you start with a clean state for U-Boot on Verdin AM62.

Full instructions and troubleshooting tips can be found here:

After the fetch completes successfully, your Yocto/U-Boot config should work as designed.

If you continue to see the same error after a significant wait (15-30 minutes), you may want to:

  • Check your network connection.
  • Try again with a different internet connection or after rebooting your router.
  • If you are behind a proxy/firewall, ensure it’s not interfering with requests.

Summary:
This HTTP 429 error is not caused by your layer or recipes—it is a temporary problem with upstream server rate limiting. The workaround is simply to wait and retry, cleaning the state if necessary.

Let me know once this phase completes or if you see a different build error.

Best regards,
Toradex AI Assistant.

Reference:
Build U-Boot for TI AM62 Based Modules

Hey, @Uday10122,

Please, disregard the AI’s last responses about setting up Yocto.

You should follow our guide on Customizing the Kernel with Yocto that I also linked in my previous response. It goes through the process of creating your custom device tree and building an image that will automatically load it with U-Boot. After adding your layer you can build the same image you were building previously for the AM62, there is no need to build U-Boot separately.

Best regards,

Hi @leonardo.costa.tx @ToradexAI

its quite confusing like i built overlays for adxl345 and also for dual channel lvds and gpio aswell few days like i followed this steps

file structure

dts file

recipe file

so with this i use to build and this will directly add that dtbo file fdt_overlays (TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT:append

are you referring to the same structure or what little confused between those

with one example can you please provide completely all the steps with code from creating device-tree to applying that to u-boot

Best regards,
Uday

Hi @leonardo.costa.tx @allan.tx @ToradexAI

Can u please provide meta layer structure i should follow and code snippets for all in that layer(Specifically for verdin-Am62) and for dts file i will take care u just provide inclusions

Best regards,
Uday

Thanks for your response.

Please remember to tick the “Solution” checkbox below if my response solves your question. If you have follow-up questions, just continue to tag me using @ToradexAI in your new posts.

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


Hello Uday,

Certainly! Here’s a clean, working example for how to set up a custom Yocto meta-layer—including the meta-layer structure and all the necessary code snippets—to add a custom device tree for the Verdin AM62. You will just need to add your custom .dts content.


1. Layer Structure

Create the following directory structure for your meta-layer (replace meta-myproject with your preferred name):

meta-myproject/
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-kernel
    └── linux
        └── linux-toradex
            ├── my-custom-board.dts
            └── linux-toradex_%.bbappend

Reference: Creating meta-layer & structure


2. Add Your Device Tree

  • Place your custom device tree source file as my-custom-board.dts in meta-myproject/recipes-kernel/linux/linux-toradex/.

For inclusions at the top of your .dts file, you typically add the parent dts you wish to base yours on. For Verdin AM62, start with:

/dts-v1/;

#include "k3-am625-verdin-nonwifi-mallow.dts"   // Or another .dts file you want as your base

/ {
    model = "My Custom Carrier Board";
    compatible = "mycompany,verdin-am62", "toradex,verdin-am62";
    // ... your hardware modifications here ...
};

Reference: First steps with device trees


3. The linux-toradex_%.bbappend File

This file tells Yocto to include your device tree in the build.

meta-myproject/recipes-kernel/linux/linux-toradex/linux-toradex_%.bbappend:

FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex:"

SRC_URI += "file://my-custom-board.dts"

do_configure:append() {
    cp ${WORKDIR}/my-custom-board.dts ${S}/arch/arm64/boot/dts/ti/
}

Adjust the destination path if needed to match where Verdin AM62 device trees are collected.


4. Add Machine Include for Custom .dtb

Create (if you want U-Boot to use it by default):

meta-myproject/conf/machine/verdin-am62-extra.conf:

KERNEL_DEVICETREE:append = " ti/my-custom-board.dtb"

And in your layer.conf, include:

include conf/machine/verdin-am62-extra.conf

5. Add Your Layer to the Build

  • Add meta-myproject to bblayers.conf.

6. Build Your Image

Now, your image will build with your custom .dts file compiled as a .dtb and placed in /boot.


7. Set Default Device Tree in U-Boot

If you want U-Boot to automatically use your .dtb on every boot, you can set this as the default in your Yocto layer as described above, or once from Linux with:

fw_setenv fdtfile my-custom-board.dtb

But for a permanent Yocto-only solution (affected after every flash), the .bbappend with the machine include solution above is preferred.


References (Please review these for deeper details)


Let me know if you’d like to see an example .dts file or further details on any step.

Best regards,
Toradex AI Assistant.

Hey @Uday10122,

I’m a bit confused about what exactly you are trying to accomplish. Are you trying to have your device use a custom Device Tree or are you trying to apply a Device Tree Overlay*? Or are you trying to do both?

From what I understood, you want to make your own device tree dts file and apply it automatically to your image during the build process (not a device tree overlay) so that it . Is that right?

Since this thread is too cluttered right now, could you please open a new thread specifying this? I’ll try helping you further there.

Best regards,