How to load DTB instead of flashing to eMMC?

Hello,

Is there any alternative way to load the DTB instead of flashing to eMMC partition ?

I tried by modifying /ete/extlinux/extlinux.conf

LABEL primary
MENU LABEL primary kernel
LINUX /boot/Image
INITRD /boot/initrd
FDT /boot/tegra194-p2888-0001-p2822-0000.dtb
APPEND ${cbootargs}

While booting it says, it loaded from this path, but my changes will not be reflected, when i read back sudo dtc -I fs -O dts -o devicetree1.dts /sys/firmware/devicetree/base

Hi thiru.shetty,

This should work. What change do you apply to your device tree?

Also, did you mean “dtc -I fs -O dts -o devicetree1.dts” and “/sys/firmware/devicetree/base” still use the old one?

Yes, I see old dtb values instead of my new changes with the below single command, found in internet to read the device tree at run time…

sudo dtc -I fs -O dts -o filenameToSaveDts.dts /sys/firmware/devicetree/base

I’m debugging camera and need to change device tree for width, height and other parameters

Are you sure you put the correct info in FTD /boot/tegra194-p2888-0001-p2822-0000.dtb?

I’m 100% sure.

I read in the forum. it’s mentioned, nvidia will support in future… Is it supported in Jetpack-4.3?, because i didn’t see the FTD entry in default sample rootfs provided by NVIDIA

Hi,

I also tried with jetson-io to modify the extlinux.conf and it should work.

I read in the forum. it’s mentioned, nvidia will support in future… Is it supported in Jetpack-4.3?, because i didn’t see the FTD entry in default sample rootfs provided by NVIDIA

No worry. I didn’t say we don’t support this.

Could you attach your dtb here and tell us what you’ve modified in default dts?

In my AGX based custom board, it’s not working…

in boot log shows this :
0.911433] DTS File Name: /home/Linux/work/jetson/sources/kernel/kernel/kernel-4.9/arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2888-0001-p2822-0000-common.dtsi

My changes :

mode0 {
                    mclk_khz = "594000"; //"37125"; //600000000 //24000
                    num_lanes = "4";
                    tegra_sinterface = "serial_a";
                   phy_mode = "DPHY";
                    discontinuous_clk = "no";
                    dpcm_enable = "false";

                    cil_settletime = "0";

                    dynamic_pixel_bit_depth = "10";

                    csi_pixel_bit_depth = "10";

                    mode_type = "bayer";
                    pixel_phase = "rggb";

                    active_w = "2080";
                    active_h = "2160";

tegra194-p2888-0001-p2822-0000.dtb.log (191.2 KB)

Note: Please rename the file

I think it is “FDT”, not “FTD”. Typographic error if you really used “FTD”. An acronym from “Flattened Device Tree”.

Hi thiru.shetty,

Do you use “FTD” in your extlinux.conf or it is just a typo on forum??

0.911433] DTS File Name: /home/Linux/work/jetson/sources/kernel/kernel/kernel-4.9/arch/arm64/boot/dts/…/…/…/…/…/…/hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2888-0001-p2822-0000-common.dtsi

This seems not prove anything. It would still show up when you flash customized dtb to kernel-dtb partition.

Sorry… Just typo mistake… correct in the query,

Ok, let me try your dtb first.

Hi thiru.shetty,

Could you try to put this dtb under /boot/dtb/ instead of /boot?

FDT /boot/dtb/tegra194-p2888-0001-p2822-0000.dtb

I tried as you suggested, now it halts at initrd (ramdisk) and it won’t mount the ext4 file system.

DTB Failed to validate:

[0009.185] I> Loading kernel-dtb sig file from rootfs ...
[0009.185] I> rootfs path: /sdmmc_user/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb.sig
[0015.409] I> lookup_linear_dir:436: Invalid file block num
[0015.409] I> ext2_walk:142: 'tegra194-p2888-0001-p2822-0000.dtb.sig' lookup failed
[0015.410] I> ext4_open_file:638: '/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb.sig' lookup failed
[0015.410] E> file /sdmmc_user/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb.sig open failed!!
[0015.413] W> Failed to load kernel-dtb sig file (err=202113041)
[0015.419] I> Loading kernel-dtb binary from rootfs ...
[0015.424] I> rootfs path: /sdmmc_user/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb
[0015.462] I> Validate kernel-dtb ...
[0015.462] I> T19x: Authenticate kernel-dtb (bin_type: 38), max size 0x400000
[0015.463] E> Stage2Signature validation failed with SHA2!!
[0015.463] C> OEM authentication of kernel-dtb header failed!
[0015.463] W> Failed to validate kernel-dtb binary (err=1077936152)

How to generate signature for tegra194-p2888-0001-p2822-0000.dtb ?? and also any other config missing ?

Hi,

I just wonder if you could use any dtb that is from official release as s test sample. For example, you could use “tegra194-p2888-0001-p2822-0000-maxn.dtb” from Linux_for_Tegra and use similar method to assign the path in extlinux.conf.

Hello WayeWWW,

With default files, it works but it won’t work with my dtb files… it clearly looking for signed file… How to generate it ?

Working case:

[0009.119] I> Loading kernel-dtb sig file from rootfs ...
[0009.119] I> rootfs path: /sdmmc_user/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb.sig
[0009.144] I> Loading kernel-dtb binary from rootfs ...
[0009.144] I> rootfs path: /sdmmc_user/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb
[0009.169] I> Validate kernel-dtb ...
[0009.169] I> T19x: Authenticate kernel-dtb (bin_type: 38), max size 0x400000

Note: tegra194-p2888-0001-p2822-0000.dtb this files with default from NVIDIA

You might find this of interest, which is basically a way to sign and not flash (which can then be combined with other install methods):
https://forums.developer.nvidia.com/t/can-runtime-update-sdmmc-boot-partition-after-enabling-fuse-by-rcm-boot-nfs-or-ota-upgrade/82334/2

Also, I don’t know the partition sizes involved, but if your tree ends up too large for a partition, then you might need to make other adjustments (and if a partition is used, then the signed dtb size has to fit, and I suppose truncation would result in a failed validation).

Hi thiru.shetty,

When you said “default files”, do you mean tegra194-p2888-0001-p2822-0000-maxn.dtb or the tegra194-p2888-0001-p2822-0000.dtb?

Have you tried to put the dtb “tegra194-p2888-0001-p2822-0000-maxn.dtb” under /boot/dtb, modify the FDT to this path and see if it can work?

Sorry that I don’t have NX at his moment so cannot help you do this test at this moment.

Hello WayneWWW,

I too don’t have NX, I’m testing on AGX module with my own custom board

Default files means, pre-built tegra194-p2888-0001-p2822-0000.dtb from NVIDIA, this file works perfectly, but only issue with my custom dtb due to missing of signed file.

Hi,

Finally found the way to sign the device tree and kernel Image from nvidia document

Enter these commands to generate signed, encrypted files:   

•For boot.img:
         sudo ./flash.sh --no-flash -k kernel jetson-xavier mmcblk0p1

•For the .dtb file:
         sudo ./flash.sh --no-flash -k kernel-dtb jetson-xavier mmcblk0p1

The signed files will be generated in bootloader/tegra194-p2888-0001-p2822-0000.dtb.sig and kenerl/Image.sig

1 Like

I too don’t have NX, I’m testing on AGX module with my own custom board

Sorry, forgot this is AGX issue but not NX. But my info pasted above are for AGX modules.