I am putting together an embedded system based on a Jetson TX1, using L4T 28.2, and I have been working on remote software update features recently. The boot flow of the system is fairly standard I believe, in that I see it go through TegraBoot, cboot, U-Boot, then Linux and finally my application. I have the kernel update and application update working fine so far and I would like to add the ability to update U-Boot as well.
If I take the standard boot.img that is present after I flash the software over USB and place it in mmcblk0p13, everything boots ok. However, if I make some changes to U-Boot, rebuild it, and re-generate the boot.img file with the following command, I notice it is missing a signature of some sort, causing cboot to not load it and the unit to then go into fastboot mode.
# cd $L4T/bootloader ./mkbootimg --kernel ./t210ref/p2371-2180/u-boot.bin --ramdisk initrd --board mmcblk0p1 --output boot.img --cmdline "root=/dev/mmcblk0p1 rw rootwait OS=l4t fbcon=map:0 net.ifnames=0"
Here is the cboot output when I install the binary generated via the above command:
[0003.129] Gpio keyboard init success [0003.133] bct_init bctinit [0003.135] bct_init bctinit [0003.140] bct_init bctinit [0003.143] bct_init bctinit [0003.346] decompressor handler not found [0003.349] load_bmp_blob: panelresolution=1080 type=3 [0003.354] bl_battery_charging: connected to external power supply [0003.366] fastboot: usb cable is not connected [0003.370] bct_init bctinit [0003.373] device_query_partition_size: failed to open partition sdmmc3_user:MSC ! [0003.380] MSC Partition not found [0003.384] bct_init bctinit [0003.386] bct_init bctinit [0003.390] blob_init: USP partition does not have valid Blob [0003.395] kfs_getpartname: name = LNX [0003.399] Loading kernel from LNX [0003.425] Verifying boot image in OdmNonSecureSBK mode [0003.448] Failed to validate boot-image [0003.451] Failed while loading kernel and ramdisk images [0003.457] Failed to boot Android [0003.460] starting fastboot mode [0003.466] fastboot cmd_init done. [0003.469] platform does not support off-mode-charge [0003.474] usbdcd_init Initialize USBF driver [0003.478] usbdcd_phy_open oscfreq = 5 [0003.487] usbdcd_start Start the initialized controller [0003.495] -- suspend --
I noticed that the signature seems to be applied only during actual flashing and I haven’t yet been able to figure out which tool I can use to generate the signature on the boot.img file without flashing. I’m not trying to use any secure boot mechanism if that makes a difference.
I would like to be able to generate a fully valid boot.img file containing U-Boot, which I could then remotely install to the device, without having to actually flash a device with it first. Please let me know if that is possible, and if so, which set of commands I could use to achieve that.