I am working with a Jetson Nano based system, using L4T 32.4.2. I recently switched from using an SD card module to an eMMC module as we get closer to production. I have some software to update U-Boot on my devices, which I migrated over from a device we make based on the TX1 module. The U-Boot update process runs on devices in the field and works fine on the TX1 and on the SD card based Nano, but does not work on the eMMC based Nano. For reference, I am not using secure boot (yet), but that is also planned for this device.
From debugging a bit, it seems that TegraBoot will check a signature on the updated copy of U-Boot and it doesn’t match what TegraBoot expects, causing TegraBoot to run the copy of U-Boot stored in the LNX-1 partition instead. Here are the messages I receive from TegraBoot when this happens:
... [0000.552] *** Booting BFS0. [0000.555] Read PT from (0:3) [0000.561] Using BFS PT to query partitions [0000.565] PT: Partition LNX NOT found ! [0001.055] *** Failing over to KFS1. [0000.308] [L4T TegraBoot] (version 00.00.2018.01-l4t-2d758fea)
The device does boot after that, but it isn’t using the modified version of U-Boot of course. Currently, I generate my U-Boot binary with a combination of mkbootimg and tegraflash.py calls, as recommended on this forum when I asked about this for my TX1 based product. Here are the commands being used to generate the updated U-Boot binary on the Nano:
sudo ./mkbootimg --kernel ./t210ref/p3450-porg/u-boot.bin --ramdisk initrd-blank --board mmcblk0p1 --output boot.img --cmdline "root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 fbcon=map:0 net.ifnames=0 sdhci_tegra.en_boot_part_access=1 " sudo ./tegraflash.py --cfg flash.xml --chip 0x21 --skipuid --bl cboot.bin --bct P3448_A00_4GB_Micron_4GB_lpddr4_204Mhz_P987.cfg --odmdata 0x94000 --bldtb tegra210-p3448-0002-p3449-0000-b00.dtb --applet nvtboot_recovery.bin --boardconfig t210ref/cfg/board_config_p3448.xml --cmd "sign"
For reference, to initially flash the device I am using the following command:
sudo ./flash.sh -S 536870912 -r jetson-nano-emmc mmcblk0p1
I am aware that there are some new tools in L4T 32.4.2 for updating the lower level boot loaders (CBoot, etc.) as well as the DTB files on the device. I tested that procedure and was not able to get it to work, but in the end I do not want to use that procedure anyways (for several reasons) and just want to support updating U-Boot.
One additional point is that I have tested my update code using an identical copy of the U-Boot binary and that update does “work”, so it doesn’t seem like my install code is broken. It only doesn’t work when I make a change to the U-Boot binary (e.g. rebuild it).
Is there a way to generate a U-Boot binary so that I can support updating only the U-Boot binary in the field?