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.
*** 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
Open the ota_board_specs.conf file in a text editor.
Locate the section for the Jetson Orin NX Devkit (e.g., jetson_orin_nano_devkit_ota_emmc_r35_spec).
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.
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).
Copy your custom device tree files (e.g., my-overlay.dts) into this new directory.
Update the device_tree field in the ota_board_specs.conf file to point to your custom device tree file.
Run the ota_build.sh script in the Linux_for_Tegra/tools/ota_tools/version_upgrade directory to build the OTA package.
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. ***
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.
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).
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.
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.
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.
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.