Is there an existing mechanism for Jetson AGX Xavier system OTA update?

I was wondering how to deploy an over the air update to Jetson AGX Xavier systems. (Without the usb recovery mode)

I have seen people mention using Ubuntu’s apt, but it’s not what we where looking for.
As an embedded device, we where looking to update the entire system: kernel, firmwares, rootfs. (Keeping the boot loaders)

It would have been fairly easy to create a u-boot script to load and program the system from compressed image files on a user partition, but u-boot was replaced by cboot for the Xavier, and I have not found similar scripting capability in cboot.

I have looked into L4T boot loader redundancy feature in older L4T release:
https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-282/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fbootloader_update_tx2.html
But it was removed from current documentation and also Jetson AGX Xavier dev kit internal drive does not contain the Slot MetaData (SMD) partition to support it.

I have also looked into cboot boot-order parameter to start the system from a different disk for the upgrade process, but without physical access to the device, SD or USB are not an option and cboot does not support nvme.

I tried the nfs boot, it’s working, but depend on an other computer, so not as robust as a stand alone solution.

So any suggestion would be greatly appreciated.

Side question: why most partitions on /dev/mmcblk0 have a _b counterpart, and do I need to update those as well?

Thanks

Hi fguimond, currently installing a new version of JetPack will re-flash the device, however in the future we have plans to move to OTA updates via a debian package server hosted online.

@dusty_nv

Great!
Will these packages also update: -fw and kernel partitions? ( I am guessing they go together? )

To give me an idea if it would be usable on our current project, please detail “in the future we have plans” :
A) approximately 1 month?
B) approximately 6 monts?
C) over a year?

I’m also very interested in this.

I specifically would like to be able to update kernel image without placing the device into “recovery” mode.

If you only want to update your kernel partitions:

  1. Run `flash.sh --no-flash -k kernel ...` to sign the kernel
  2. dd the signed file to /dev/disk/by-partlabel/kernel and kernel_b

That is what flash.sh does.
You can do it also for any partitions supported with the flash.sh -k option.

Thanks. I’ll try that.