How Do I use custom device tree files in the 6.2 OTA Tools?

I’m trying to build a Jetson Jetpack 36.4 OTA payload for our custom board that uses a Jetson Orin NX SOM with some device tree changes. I used the Pinmux excel tool to create custom device tree files and can build and flash a system with the modified device trees and a modified NVME partition scheme XML file.
Now I want to build an OTA package with the 36.4 OTA tools, but I don’t see how to pass my custom device tree files into the scripts. Can you either explain how to do it, or point me to documentation that explains it?
Note, I can build a Jetson Orin NX Devkit OTA package, pretty easily so I’m hoping there is some simple trick to pass my device tree files to the OTA tools.

Thanks,
Blair

*** Please note that this reply is generated by LLM automatically ***

To build a Jetson Jetpack 3.6.4 OTA payload for your custom board that uses a Jetson Orin NX SOM with custom device tree changes, you’ll need to modify the OTA tools to include your custom device tree files. Here’s a step-by-step guide to help you achieve this:

Understanding the OTA tools

The OTA tools are located in the Linux_for_Tegra/tools/ota_tools/version_upgrade directory. The ota_board_specs.conf file in this directory contains the board specifications for each supported Jetson device. You’ll need to modify this file to include your custom device tree files.

Modifying the ota_board_specs.conf file

  1. Open the ota_board_specs.conf file in a text editor.
  2. Locate the section for the Jetson Orin NX Devkit (e.g., jetson_orin_nano_devkit_ota_emmc_r35_spec).
  3. Create a new section for your custom board by copying the existing section and modifying the board_name and device_tree fields to match your custom board’s specifications.

Example:

[jetson_orin_nx_custom_board_ota_emmc_r35_spec]
board_name = "Jetson Orin NX Custom Board"
device_tree = "my-custom-device-tree.dtb"

Adding custom device tree files

  1. Create a new directory in the Linux_for_Tegra/tools/ota_tools/version_upgrade directory to store your custom device tree files (e.g., my-custom-device-tree).
  2. Copy your custom device tree files (e.g., my-overlay.dts) into this new directory.
  3. Update the device_tree field in the ota_board_specs.conf file to point to your custom device tree file.

Example:

[jetson_orin_nx_custom_board_ota_emmc_r35_spec]
board_name = "Jetson Orin NX Custom Board"
device_tree = "my-custom-device-tree/my-overlay.dtb"

Building the OTA package

  1. Run the ota_build.sh script in the Linux_for_Tegra/tools/ota_tools/version_upgrade directory to build the OTA package.
  2. The script will use the modified ota_board_specs.conf file to include your custom device tree files in the OTA package.

Tips and Variations

  • Make sure to update the NVME partition scheme XML file to match your custom board’s storage configuration.
  • If you have multiple custom device tree files, you can create a separate section in the ota_board_specs.conf file for each file.
  • You can also modify the ota_board_specs.conf file to include custom kernel modules or other files required by your custom board.

Documentation

The official NVIDIA documentation for the Jetson OTA tools is available on the NVIDIA Developer website. However, the documentation might not cover the specific use case of including custom device tree files in the OTA package. You can refer to the ota_board_specs.conf file and the ota_build.sh script for more information on how to modify the OTA tools to include your custom device tree files.

I hope this helps you build a Jetson Jetpack 3.6.4 OTA payload for your custom board with custom device tree changes!

*** Please give the thumbs up if you get answers you like. Or provide feedback to help us improve the answer. ***

OK, so that’s pretty close to what I need, except you mix and match R35 and R36.

There is NO example of board_name or device_tree variables anywhere in the OTA tools directory., let alone the ota_board_specs.conf file.

Hi Blair010,

What’s the board config name you used for your custom carrier board during flash? Also jetson-orin-nano-devkit.conf?

Could you flash r36.4 to your board and boot successfully before you start to generate OTA payload?

What are the base and target releases for the OTA update? r36.4.0 to r36.4.0?

You can refer to <Linux_for_Tegra>/tools/ota_tools/version_upgrade/Image_based_OTA_Examples.txt for the detailed workflow.

My ota machine configuration file is custom-orin-nx.conf.

I can flash R36.4 onto our custom board. Some of the GPIOs and the extra UART and clock don’t work correctly, but it boots.

Currently, I’d be happy doing an r36.4 → r36.4 OTA installation.
The examples in the file you mentioned don’t cover this case. I’ve already checked there before posting here.

I have a custom-pinmux.dtis, custom-padvoltage-default.dtsi and a custom-gpio-default.dtsi, as well as a custom_rootfs_ab.xml partition layout file that I believe I need in the OTA work directory to be able to build a ota package that will install and boot.

Maybe I am misunderstanding how the OTA tools work.

Thanks,

Blair

I guess the real question is “Does Jetpack 6.2 (aka R36-4) support OTA updates on a custom board?”

If the answer is yes, please provide specific documentation to be able to do so.

If the answer is no, then no problem. I won’t be able to do OTA updates on my custom board with NVIDIA tools (which doesn’t stop me from writing my own tools).

It should be yes, but you have to customize the OTA tool to recognize your board config.

Please refer to the patch in How to generate OTA payload for custom baords - #7 by KevinFFF for the example how we added the OTA support for new board config.

Hi KevinFFF,

Thanks for the patch. I think it’s incomplete, since I don’t see the JETSON_ORIN_NANO_DEVKIT_SUPER.conf and JETSON_ORIN_NANO_DEVKIT_SUPER_MAXN.conf files. I have already updated l4t_generate_ota_package.sh and ota_board_spec.conf to reflect my custom board. What I need is an example custom.conf that includes definitions for BPFDTB_FILE, DTB_FILE, PINMUX_CONFIG, and PMC_CONFIGvariables as called out in the .conf file, as these files are changed when running the pinmux-excel tool for a custom pin setup.
When I do the obvious thing of copying the jetson-orin-nano-devkit.conf file to custom.conf and changing the aforementioned pinmux, pmc and dtb and bpfdtp values, the OTA package fails to build with a python error. In addition, I need to know where to copy those custom files into the OTA build tree, so that they actually get used in the build.

Thank you for the prompt reply,

Blair

That patch is just an example to add the support for jetson-orin-nano-devkit-super.conf.
In your case, your custom board config is custom.conf.
As a result, you should replace all jetson-orin-nano-devkit-super related strings with custom for your use case.

OTA payload generation will follow what you define in board config(custom.conf).
If you can flash your board with custom.conf successfully, then it should be fine. (i.e. you don’t need to update custom.conf when you are generating OTA payload.).

I think I was unclear in asking my question.
What I have is a custom carrier board based on the jetson orin nano development board. We are using a Jetson Orin Nano NX SOM with the board. I have a new PINMUX_CONFIG, PMC_CONFIG, and MB2BCT_CFG. Can I just copy the jetson-orin-nano-devkit.conf file and change those macros to point to my files? Or is it more complicated than that and if so can you provide documentation explaining what I must do to have your tools work with my board?

Well, I almost have got it working. I am able to build an OTA payload for “custom.conf”. The problem I now have is that when applying the OTA payload, I run into COMPATIBLE_SPEC=3767-000-0000–1–custom which doesn’t match _BOARD_SPEC_NAME=3767-000-0000-

So not sure how to fix that as the scripts are pretty complex and not well documented.

Do you refer to the patch in the thread I shared on 28/Aug.?

If so, please share your ota_board_specs.conf and the full log when you are building the OTA payload for further check.

I used jetson-orin-nano-devkit.conf as my source for fusehub-orin-nx.conf. I have attached this file as well as ota_board_specs.conf. In addition I have attached the ota build log file.

log.fusehub.ota.txt (2.2 MB)

fusehub-orin-nx.conf.txt (4.1 KB)

ota_board_specs.conf.txt (6.6 KB)

Any update on this?

OK, I’ve been able to cobble together a fusehub-orin-nx.R36-4-to-R36-4.ota_payload_package.tar.gz for my custom board. However, when I install the package on the target system and I reboot, it fails to boot to A, and correctly fails back to B. I have attached the logfile of the console output (installation through update, through reboot failure and fail over).
I am hopeful that you can tell me what I am missing or let me know any other logs or files you might need.

ota-console.log.txt (273.8 KB)