Questions about Image based OTA update

I am reading Image based OTA update and plan to try it on my Jetson AGX Xavier boards to update to latest 32.6.1.

Normally when I flash the board, I use
sudo ./flash.sh jetson-xavier mmcblk0p1
But the OTA doc suggests using target board name “jetson-agx-xavier-devkit” instead. Shall I use “jetson-xavier” (as I did in flash.sh command) or “jetson-agx-xavier-devkit”?

My board currently runs 32.3.1, in the OTA command for bsp_version, shall I use R32-3 or R32-3-1?

payload creation failed. Not sure why output message mentions r32_3_4 even though I gave R32-3 and my actual board runs 32.3.1

sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-agx-xavier-devkit R32-3


*** Sign and generate BUP… ***

t19x payload generation complete with 3 failure(s)

SUCCESS: cleaned up BUP tmp files prior to payload creation

FAILURE: no payload made for config “boardid=2888;fab=400;boardsku=0001;boardrev=D.0;fuselevel_s=1;chiprev=2;board=jetson-agx-xavier-devkit;rootdev=mmcblk0p1;signed_img_dir=images-R32-ToT”

FAILURE: no payload made for config “boardid=2888;fab=400;boardsku=0001;boardrev=E.0;fuselevel_s=1;chiprev=2;board=jetson-agx-xavier-devkit;rootdev=mmcblk0p1;signed_img_dir=images-R32-ToT”

FAILURE: no payload made for config “boardid=2888;fab=400;boardsku=0004;boardrev=;fuselevel_s=1;chiprev=2;board=jetson-agx-xavier-devkit;rootdev=mmcblk0p1;signed_img_dir=images-R32-ToT”

SUCCESS: cleaned up BUP tmp files after payload creation

Failed to run “/home/nvidia/workspace/xavier/Linux_for_Tegra/l4t_generate_soc_bup.sh -f /home/nvidia/workspace/xavier/Linux_for_Tegra/tools/ota_tools/version_upgrade/ota_board_specs.conf -e jetson_agx_xavier_devkit_ota_emmc_r32_3_4_spec -b jetson-agx-xavier-devkit t19x”

*** Sign and generate BUP… ***
Signing with zerosbk …
File “/home/nvidia/workspace/xavier/Linux_for_Tegra/bootloader/rollback/rollback_parser.py”, line 42
print ‘rollback info is parsed and saved in’, params.output
^
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(‘rollback info is parsed and saved in’, params.output)?

hello user100090,

you may modify the apt source configuration file, nvidia-l4t-apt-source.list to point to r32.6 release code-line.
for example,
deb https://repo.download.nvidia.com/jetson/common r32.6 main
deb https://repo.download.nvidia.com/jetson/t194 r32.6 main

after that, please execute the following commands to have OTA update.
$ sudo apt update
$ sudo apt dist-upgrade
$ sudo reboot

when the upgrade complete, you should also execute $ sudo apt install nvidia-jetpack for installing the JetPack components.
thanks

I understand the apt method, but am looking for the Image Based method which hopefully will give the option to enable A/B filesystem through re-partitioning. Are you suggesting the image based method won’t work for the board? does it only support devkit?

hello user100090,

the OTA update through Debian package is supported since r32.3.1. as you’re based-on r32.3.1; there’s no need to use image-based OTA .
see-also, TX2 4GB with R32.3.1 having issues with OTA version update - #6 by JerryChang

The Debian package update approach doesn’t support re-partition to enable rootfs A/B. I have the AGX Xavier board which Image based OTA should supports, though I am seeing errors as mentioned in this thread. The image base OTA is preferred to me because it can change partition layout that is needed for rootfs A/B.

Two questions:

  1. does Image based OTA update really support AGX Xavier board, or does it ONLY support the devkit?
  2. If the AGX Xavier board is supported, how to pass ROOTFS_AB=1 to the OTA image?

hello user100090,

you should moving to JetPack-4.6 then enabling the A/B root file system redundancy.
you’ll need to execute the flash command to create and flash the target board with rootfs redundancy, by adding ROOTFS_AB=1.
please check developer guide, [How to Create Redundant Root File Systems].
thanks

Sounds like rootfs A/B won’t help me now since I am on 4.3, and you can’t A/B between 4.3 and 4.6. It will help in the future.

Let’s park A/B for now, and focus on the original question regarding Image based OTA update. The online doc talks both APT based update and Image based update. Is image based ota update supported at all for 4.6 on AGX Xavier board?

If yes, we can focus on how to get it work and whether I did something wrong in above steps.
If no, we will just close this thread, and stick to using APT repo update or direct flash.

hello user100090,

it’s supported, please share your whole steps for reference, thanks

Please refer to the first three posts in this thread for the steps and errors I got.

since you’re based-on r32.3.1, please see comment #5 for steps upgrading to r32.6 release.

The host machine is already on 32.6.1. That’s where I ran the command

sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-agx-xavier-devkit R32-3

I am trying to generate the ota package, on the host. At this time, I haven’t touched the board yet.
Are you suggesting the l4t_generate_ota_package.sh will only work if the board is already upgraded to 32.6? The purpose of this script is to generate ota package to be used to upgrade the board, but if the board is already upgraded, what’s the point?

hello user100090,

please specify the destination release version instead of your current release version.
OTA only support moving forward, rollback is not supported.

Please see the first post in the thread. We are planning to OTA upgrade the target board to 32.6.1, and the board is currently on 32.3.1

I am trying to prepare the packages on the host machine that has 32.6.1, but the script gives errors. Please see the first few posts in this thread for detailed errors.

In my case this issue was solved by linking python to python2.7.

Earlier releases did not support OTA upgrade. I’m not positive, but I think 32.3.1 predates that ability to release upgrade. I am guessing you will want to clone your current work, and then flash with 32.6.1, possibly followed by adding back in whatever your old work is.

Note that you can clone the AGX (assuming your host PC has lots of spare disk space, about 50 GB) via this from the “Linux_for_Tegra/” directory:
sudo ./flash.sh -r -k APP -G my_backup.img jetson-xavier mmcblk0p1

The result will be a raw file (not compressed and very useful, able to be loopback mounted), “my_backup.img.raw”, and a sparse file (useful only for flashing), “my_backup.img”. I personally throw away the sparse file and keep only the raw file, but beware this is an enormous file (the size of the rootfs partition).

linuxdev:
Version 32.3.1 is supposed for OTA upgrade. Based on this page, AGX Xavier versions 32.1 onwards are supported.

tomosat:
Your suggestion fixed my issue! Now python3 is installed by default, and after I manually installed python2.7 and make it python, the error goes away. Thanks a lot!

Next question: how to create a OTA package that can re-partition and enable A/B rootfs during upgrading?

hello user100090,

the OTA process is the same, you should setting up your rootfs with redundancy.
please check How to Create Redundant Root File Systems to do customizations before the flashing.
thanks

I am not sure what you meant by “before the flashing”. You answered the same in the other thread Enable filesystem A/B - #6 by user100090 BUT I am not directly flashing the board, so not running flash.sh which takes the ROOTFS_AB=1. With OTA, I am using l4t_generate_ota_package.sh to generate the OTA package, and nv_ota_start.sh to start the upgrading (equivalent to flash I guess). Do any of those OTA scripts support ROOTFS_AB=1?