OTA update change boot from external memory to internal memory

I had a jetson xavier nx with L4T32.7.1, that was booting from an external drive.

I tried to generate a ota_payload so that I could bring it to L4T35.3.1
This is the command I used to generate the payload

sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 200GiB jetson-xavier-nx-devkit-emmc R32-7

it all went well, and I applied the OTA payload on my device

After rebooting, the device is booting up and everything seemed fine, my ROOTFS changes were present my program was working… there was only 1 thing different the device was now booting from the internal emmc :( not the external m.2 disk :(

What happened ? What am I missing? Did I do something wrong? Is what I want even possible?

thanks in advance for any pointers

Hi luis21,

Are you using the devkit or custom board for Xavier NX?

Have you confirmed you put the OTA update package in the rootfs of NVMe(nvme0n1p1) rather than the roofs of eMMC (mmcblk0p1)?

Could you share the following 2 logs in your case?

  1. generate OTA package on host side
  2. OTA update process on the board

I am using the devKit. I am quite sure that I put in on the NVME, because if I mount the NVMe disk and go in I can see the old rootfs and the /ota/ folder with the package inside.

I’ve attached the generation logs. For the OTA update process on the board I don’t have logs, neither I can find the /ota_logs/ folder on neither of the ROOTFS

ota_payload_generation.txt (471.0 KB)

Have you confirmed it was really booting from external NVMe rather than booting from eMMC but mount NVMe as rootfs?

Do you mean it boot from internal eMMC with R32.7.1 now?

Could you switch it boot from external NVMe with R35.3.1?

Hum… Interesting question. How can I double check this ? Because maybe that was indeed the case.

It booted from the internal eMMC but with R35.3.1

I do know that I used this commands to generate the image and flash, in the past

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --massflash 5 --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_nvme.xml -S 200GiB --showlogs jetson-xavier-nx-devkit-emmc nvme0n1p1

Are you generating the OTA package for massflash?

In bootloader, selecting the eMMC as boot-device and check the contents in /boot/extlinux/extlinux.conf.
Or run the following command

$ cat /proc/cmdline

OTA update will update only one device(eMMC or NVMe) at the same time.
Could you share the result of the following command?

$ lsblk
$ cat /etc/nv_tegra_release

Thanks for getting back to me.
Now It is working as expected. So an issue that I had was that while generating the ota_payload I didn’t update the conf file specifying the partitions sizes, so the number of blocks did not match my disk size.
After updating this, and generating a new ota_payload and applying it again it works as expected and now my system is mounting the rootfs in the NVMe

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.