Custom DTB during flashing

I have a custom carrier which requires minor changes to the DTS/DTB compared to the official p3768-0000 development board. My target is Orin Nano 8GB and I’m using Jetpack 6.2. I’ve created DTBs following guidance from the developer manual. I have located and followed the instructions to include the modified DTB in the extlinux.conf (from Jetson Orin NX and Nano Series — NVIDIA Jetson Linux Developer Guide) once the system is installed. This results in a booting system which enables the additional hardware on my carrier board thus validating my DTB modifications.

For the next step of the integration I need to include the modified DTB as part of the flashing process but I have not located instructions or documentation on how to do this.

I’ve tried updating our flash.sh configuration file using guidance from Flashing Support — NVIDIA Jetson Linux Developer Guide and Partition Configuration — NVIDIA Jetson Linux Developer Guide but am unable to arrive at a system which successfully completes the flashing procedure and boots using the modified DTB.

Is there a supported method to boot using the modified DTB directly from flashing (without having to manually modify extlinux.conf on a running system)?

Hi adrian.hill1,

You have to create a custom board config, which should include the custom DTB file specified.

You can also check the flash log to know which DTB is in use.
Please share the full flash log for further check.

Sure.

I can see evidence of the problem in the first few lines of the flash log. My config file (below) tries to set the DTB_FILE variable to point to my modified DTB but when initrd_flash.sh is run the kernel DTB setting is somehow reset to tegra234-p3768-0000+p3767-0003-nv.dtb.

From the log:

****************************************************
*                                                  *
*  Step 2: Boot the device with flash initrd image *
*                                                  *
****************************************************
/home/adrian/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra/temp_initrdflash/bootloader0 /home/adrian/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra
./tegraflash.py --bl uefi_jetson_minimal_with_dtb_sigheader.bin.encrypt --bct br_bct_BR.bct --securedev  --bldtb tegra234-p3768-0000+p3767-0003-nv.dtb --applet rcm_2_encrypt.rcm --applet_softfuse rcm_1_encrypt.rcm --instance 1-2 --cmd "rcmboot"  --cfg secureflash.xml --chip 0x23 --mb1_bct mb1_bct_MB1_sigheader.bct.encrypt --mem_bct mem_rcm_sigheader.bct.encrypt --mb1_cold_boot_bct mb1_cold_boot_bct_MB1_sigheader.bct.encrypt --mb1_bin mb1_t234_prod_aligned_sigheader.bin.encrypt --psc_bl1_bin psc_bl1_t234_prod_aligned_sigheader.bin.encrypt --mem_bct_cold_boot mem_coldboot_sigheader.bct.encrypt  --bins "psc_fw pscfw_t234_prod_sigheader.bin.encrypt; mts_mce mce_flash_o10_cr_prod_sigheader.bin.encrypt; tsec_fw tsec_t234_sigheader.bin.encrypt; mb2_applet applet_t234_sigheader.bin.encrypt; mb2_bootloader mb2_t234_with_mb2_cold_boot_bct_MB2_sigheader.bin.encrypt; xusb_fw xusb_t234_prod_sigheader.bin.encrypt; pva_fw nvpva_020_sigheader.fw.encrypt; dce_fw display-t234-dce_sigheader.bin.encrypt; nvdec nvdec_t234_prod_sigheader.fw.encrypt; bpmp_fw bpmp_t234-TE950M-A1_prod_sigheader.bin.encrypt; bpmp_fw_dtb tegra234-bpmp-3767-0003-3509-a02_with_odm_sigheader.dtb.encrypt; rce_fw camera-rtcpu-t234-rce_sigheader.img.encrypt; ape_fw adsp-fw_sigheader.bin.encrypt; spe_fw spe_t234_sigheader.bin.encrypt; tos tos-optee_t234_sigheader.img.encrypt; eks eks_t234_sigheader.img.encrypt; kernel boot0.img; **kernel_dtb tegra234-p3768-0000+p3767-0003-nv.dtb**"    --bct_backup
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands

Our flash.conf:

source "${LDK_DIR}/p3768-0000-p3767-0000-a0.conf"

PINMUX_CONFIG="Orin-mach_04281-pinmux.dtsi";
PMC_CONFIG="Orin-mach_04281-padvoltage-default.dtsi";
DTB_FILE="orin-nano_mach-04821.dtb";
EMMC_CFG="flash_t234_qspi_nvme.xml";

if [ "${UPHYLANE}" = "c7x1" ]; then                                                                                                                                                                                      UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x1.dtsi";
        EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
elif [ "${UPHYLANE}" = "c7x2" ]; then
        UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x2.dtsi";
        EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
fi

Initrd_flash command line:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -p "-c ./bootloader/generic/cfg/flash_t234_qspi.xml" -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --network usb0 mach-04821_orin-nano8g external

Please share your custom board config (i.e. mach-04821_orin-nano8g.conf) and full flash log as file here for further check.

Have you also referred to Board Configuration to create custom board config?

KevinFFF,
Please see attached.

flash_1-2_0_20250714-152100.log (48.0 KB)

mach-04821_orin-nano8g.conf.txt (2.1 KB)

This flash log only includes the flashing part.
There should be another log including generating the image before flash and it would indicate which dtb in use.

Okay, I found a potential issue in your configuration.
Your custom board config will include p3768-0000-p3767-0000-a0.conf.
You can find the following lines in this config.

DTB_FILE=tegra234-p3768-0000+p3767-0000-nv.dtb;
TBCDTB_FILE="${DTB_FILE}";

DTB_FILE is the DTB used for kernel.
TBCDTB_FILE is the DTB used for bootloader(UEFI).
We will assign them with the same dtb by default.

In your custom board config, you’ve specified DTB_FILE with your custom board config while you don’t assign it for TBCDTB_FILE.
As a result, TBCDTB_FILE will still use tegra234-p3768-0000+p3767-0000-nv.dtb.
In R36.x, we will use device tree from UEFI-DTB by default if FDT is not specified in extlinux.conf.
Please refer to DTB Support for details.

Kevin,

I’ve updated mach-04821_orin-nano8g.conf to included assignment of variable TBCDTB_FILE.

I’ve rerun the initrd_flash process and captured the entire terminal output.

I note that the image generation still seems to ignore the DTB_FILE and TBCDTB_FILE settings and proceeds with the default tegra234-p3768-0000+p3767-0000-nv.dtb for both.

flash.txt (357.9 KB)
mach-04821_orin-nano8g.conf.txt (2.1 KB)

Thanks,
-Adrian