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.
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)?
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
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 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.
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.