Update Device Tree on Nano Dev Kit

Hi,

I’m having an issue updating the device tree on my nano. I have many running this version, and have to stick with that version:

NVIDIA Jetson Nano (Developer Kit Version)
 L4T 32.2.0 [ JetPack 4.2.1 ]
   Ubuntu 18.04.3 LTS
   Kernel Version: 4.9.140-tegra

I would like to enable spi, and this requires a device tree update. I have the .dtb file I would like to flash. First, I tried updating extlinux.conf to add an FTD entry, which had no effect after a reboot. I found somewhere that this version doesn’t support the FTD flag, which is very unfortunate, and finally discovered the DTB partition which stores the encrypted and signed device tree file.

I have managed to produce an encrypted and signed .dtb, and flashed that partition, but after a reboot, it still has no effect. I tried writing junk to that partition and removing all /boot/*.dtb files to see if it was loading it from somewhere else, and finally realized that it must be storing it in the qspi storage, and I have to figure out how to overwrite that.

I have two questions:

  1. Is there a way to make the extlinux.conf entry work so I can specify an unecrypted and unsigned .dtb file? I read somewhere about security fuses which I didn’t fully understand, but if I can reset these and regain control of the device tree, I would like to. Even if I can just get the bootloader/kernel to read the device tree from the DTB partition, that would be ideal.

  2. Is there a simple way for me to flash the qspi? I’m guessing flash.sh is able to do it. Is there a way to avoid going into recovery mode? If flash.sh is able to do this, is there a subcommand that I can run directly? Also, with flash.sh, does it matter what version I use? Should I use the version for the software that I’m running, or will it not matter?

Thanks!

You can try to write the partition through dd command on your device.

Flash.sh requires your board to be in recovery mode to flash, no matter which version in use.

I have written to the partition with the dd command. I have tried signing the .dtb file with flash.sh as well as with other tools, and nothing seemed to be read after a reboot. I even tried writing /dev/random to the partition, and it had no effect on the bootup. I’m confused why it isn’t reading this partition, and I wonder if it has something to do with security fuses. Do you know any reasons why the nano might not read from the partition on bootup?

Regarding recovery mode for the developer kit, I have seen a few different sets of instructions online for how to do this. Could you point me to the right way to do it for the B01?

I suggest looking at a serial console boot log to see exactly what is loaded from where. If this is an eMMC model, and if fuses are burned, then it would force load from the partition which is flashed. If this is an SD card model, and if a device tree is listed in “/boot/extlinux/extlinux.conf”, then it should load from that (the “FDT” key/value pair). If no FDT entry, then it would load from the partition of QSPI flashed by JetPack/SDKM.