DTB not updating after kernel update

I’ve built a kernel from source for a Jetson Xavier-based OEM module connected to a camera subsystem. I use the devkit baseboard to flash kernels - we don’t have usb or recovery mode connected to our camera in the first spin.

After building and flashing, the DTB, which is smaller than the orginal, don’t seem to be updating. Do I have to flash the bootloader to get the new dtb?

Here’s my process…
Be here…
Source ~/devenv.sh (Setus up env variable for dirs and cross tools)

Make mrpoper (if old build)
Create the .config file
make ARCH=arm64 O=$KERNEL_OUT tegra_defconfig

Build the kernel and DTBs


Install modules in temporal location


Make a backup of the current image

BKUP_DATE=date "+%Y_%m_%d_%H_%M_%S"
mv ${JETPACK}/Xavier/Linux_for_Tegra/kernel/Image{,.BKUP_DATE} mv {JETPACK}/Xavier/Linux_for_Tegra/kernel/zImage{,.BKUP_DATE} mv {JETPACK}/Xavier/Linux_for_Tegra/kernel/kernel_supplements.tbz2{,.BKUP_DATE} mv {JETPACK}/Xavier/Linux_for_Tegra/kernel/dtb{,.$BKUP_DATE}

Deploy binaries in their required locations

Use deploys.sh for cp commands below

cd KERNEL_OUT/ cp ./arch/arm64/boot/Image {JETPACK}/Xavier/Linux_for_Tegra/kernel/
cp ./arch/arm64/boot/zImage ${JETPACK}/Xavier/Linux_for_Tegra/kernel/

cp -r ./arch/arm64/boot/dts/* ${JETPACK}/Xavier/Linux_for_Tegra/kernel/dtb <<<<<< Correct?

Regenerate kernel modules supplement file

cd KERNEL_MODULES_OUT tar --owner root --group root -cjvf {JETPACK}/Linux_for_Tegra/kernel/kernel_supplements.tbz2 lib/modules

Generate JetPack image

cd ${JETPACK}/Linux_for_Tegra/
sudo ./apply_binaries.sh

Flash the kernel (target into FREC mode)

sudo ./flash.sh -k kernel jetson-xavier mmcblk0p1

On the target, in the /boot directory, should I see the new tegra194-p2888-0001-p2822-0000.dtb ? Or in the ./dtb directory The dates and sizes are incorrect.


hello larry.ciummo,

your customize dtb files has being overwritten while you generate JetPack image by sudo ./apply_binaries.sh, it will extract the firmware and kernel modules from default release packages.
you may refer to below steps for reference,
for example,

Installing the board *.dtb and *.dtbo files into /boot in target rootfs…

you may apply the script to generate the image once, and you’re have correct commands to replace the dtb file.

you should also check Flash Script Usage for the commands to update the partition, you’re not having correct commands to update device tree partition.
please using below commands to update your device tree partition.
i.e. $ sudo ./flash.sh -k kernel-dtb jetson-xavier mmcblk0p1

please also refer to Xavier Boot Flow, and check the [Kernel Boot Sequence Using extlinux.conf] session.
there’re two ways to update device tree, you could also specify the FDT entry in extlinux.conf configuration file to make it loads the kernel-dtb binary file from FDT entry.

Thanks. I thought no one was going to answer this.

I “should” be making a custom board name for this system – I think that would have prevented this issue.


hello larry.ciummo,

you may also access Xavier Product Design Guide via download center for the recommendations and guidelines of board customization.

Thanks. Looks like a lot of good info for the HW/carrier board guys here. Couple more products are starting up to do an X-AGX based product.

I think I’m going to follow the recommendation and create a new board name for this DTB/kernel and add a new LMK for my driver, vs hacking old files.

I saw the directions, but they were brief – is there a reference on what to change for files for a new board.

  1. Create a new top level DTB w/ new name.

  2. Add in custom DTB w/ another new name – remove plugin manager.

  3. Add source for new driver into nvidia (or flir) source directory

What do I change to get it to boot the new DTB? Anything else?



hello larry.ciummo,

you may check documentation for Building the NVIDIA Kernel, you should replacing DTB file with the original one and using flash scripts to update kernel-dtb partition.
suggest you may also check flashing messages, it would shows the dtb file name of your board used.
for example,

[ 105.1117 ] Writing partition kernel-dtb with tegra194-p2888-0001-p2822-0000_sigheader.dtb.encrypt
[ 105.1266 ] [................................................] 100%

please also check Xavier Boot Flow chapter and refer to [Kernel Boot Sequence Using extlinux.conf] session.
there’s an alternative way, you may assign FDT entry in the extlinux.conf board configuration file, to make device tree loads from the FDT entry.

Thanks - your last sentence was the key to getting my DTB to boot - figured that out yesterday. I I have a custom named DTB, so I sign it with the flash tool and then move into into the rootfs manually then flash the board?

hello larry.ciummo,

you don’t need to sign dtb file manually if you’re using the flash script to update the board.

there’re two approaches for replacing device tree without flashing the board. please also check Topic 153384 for reference.

If I use the tegra board name in flash.sh but want to use a new DTB name, that’s the case I’m asking about.

Is there a list of steps to create a new “board”, including the target name on the flash command?


as I mentioned in post #5, please access Xavier Product Design Guide to have board customization.

You might have misunderstood my question. The OEM product design guides is a hardware document. My question was concerting the steps needed to create new SW for a board. Presently I’m reusing the AGX tree of files, and there are some very short instructions about “creating a new name, etc?”. Is there a document that covers this?

hello larry.ciummo,

please check flash configuration file, it indicate the binaries to flash to the partitions.
for example, $OUT/Linux_for_Tegra/bootloader/t186ref/cfg/flash_t194_sdmmc.xml
there’s kernel-dtb partition for Xavier’s device tree binary.

        <partition name="kernel-dtb" type="data" oem_sign="true">
            <allocation_policy> sequential </allocation_policy>
            <filesystem_type> basic </filesystem_type>
            <size> 524288 </size>
            <file_system_attribute> 0 </file_system_attribute>
            <allocation_attribute> 8 </allocation_attribute>
            <percent_reserved> 0 </percent_reserved>
            <filename> DTB_FILE </filename>
            <description> **Required.** Slot A; contains kernel device tree blob. </description>

also, please refer to source file of Xavier’s flashing configuration, i.e. p2972-0000.conf.common,
you should also search for keyword, DTB_FILE to understand it choose the file name depends-on your platform.
you may also have modification there to update the naming to make it works.

Thanks. This should be helpful.
I’m gonna hold off on the full board name until I can prove the mipi to V4L stream is up.