Image based OTA update via golden image

Hello,

I have carrier board from seeed, jetson orin nano 8gb, I want to make OTA update over the air from 5.1.3 to 6.1

  1. Flash first device with J6.1 on board ( tested, all working ), then created golden image via:
./tools/kernel_flash/l4t_initrd_flash.sh --initrd  jetson-orin-nano-devkit nvme0n1
ssh root@fc00:1:1:0::2 "dd if=/dev/nvme0n1p1 | gzip" | gzip -d > bootloader/system.img.raw

ls -lah bootloader/system.img.raw
-rw-r--r-- 1 root root 118G Jan 16 12:15 bootloader/system.img.raw
  1. Create OTA package
export BASE_BSP=%path to J5.1.3%
export TARGET_BSP=%path to J6.1%
cd $TARGET_BSP && ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 116GiB jetson-orin-nano-devkit R35-5

During this command, process seems stuck in a loop with problem what some signed files not found
get_ota.txt (76.2 KB)

Custom BSP for carrier board was compiled from official github repo
Device with only NVME drive ~120GB

Question aside: is it possible to create golden image from MFI package instead from device directly?

Any advice are welcome,
Thanks

Hi nox.gias,

[   6.2650 ] End sector for APP, expected at: 199999966, actual: 0
Error: Return value 4

From the log you shared, it seems you have size issue during generating OTA package.

Have you confirmed that your custom board uses jetson-orin-nano-devkit.conf as board config?

./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 116GiB jetson-orin-nano-devkit R35-5

Please use the following command instead.

$ sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB jetson-orin-nano-devkit R35-5

Please also share the flash_l4t_t234_nvme.xml from your host for further check.

Hi Kevin,

Thank you for help, unfortunately change size didnt worked, the same error.

Have you confirmed that your custom board uses jetson-orin-nano-devkit.conf as board config?

Ideally should be recomputer-orin-j401.conf, but when I used it, its even not start, but crash with ton of errors which I tried to bypass

export BOARDID=3767
export BOARDSKU=0003
export FAB=300
export BOARDREV="N.2"
export CHIP_SKU="00:00:00:D6"
./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB recomputer-orin-j401 R35-5

Target board(RECOMPUTER_ORIN_J401) and base version(R35_5) is not supported
Failed to get the chip id for RECOMPUTER_ORIN_J401
OTA with nvme0n1 is not supported on recomputer-orin-j401
Usage: sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh [options] <target board> <bsp version>
        Where,
                <target board>: target board. Supported boards: jetson-agx-orin-devkit, jetson-agx-orin-devkit-industrial, jetson-orin-nano-devkit.
                <bsp version>: the version of the base BSP. Supported versions: R35-5, R35-6, R36-3, R36-4.
        options:
                -u <PKC key file>: PKC key used for odm fused board
                -v <SBK key file>: Secure Boot Key (SBK) key used for ODM fused board
                -i <enc rfs key file>: Key for disk encryption support
                -s      Skip generating system image.
                -b      Update bootloader only. Only valid if <bsp version> is R36.
                -r      Update rootfs only. Only valid if <bsp version> is R36.
                -o      Specify the script to update rootfs partition.
                -f      Specify the rootfs image to be written to rootfs partition.
                -p      Specify the options directly passed into flash.sh when generating images.
                --external-device <external device>: Specify the external device to be OTAed. Supported devices: nvme0n1.
                  This option is only valid for jetson-orin-nano-devkit.
                -S <size>: Specify the size of rootfs partition on external device. Only valid when --external-device option is set. KiB, MiB, GiB short hands are allowed
                  Ths size set through this option must be the same as the size of rootfs partition on the external device to be OTAed.
                -E <esp image>: Specify the image to update ESP.
                -T <ext num sectors>: Specify the number of the sectors of the external storage device.
                --rootfs-uuid <rootfs UUID>: Specify UUID for rootfs tp be updated through OTA
                --rootfs-b-uuid <rootfs B UUID>: Specify UUID for rootfs B on the device to be updated through OTA.
                --uda-uuid <uda UUID>: Specify UUID for UDA on the device to be updated through OTA.
                --uefi-keys <keys_conf>: Specify UEFI keys configuration file.
                --uefi-enc <UEFI_ENC_key>: Key file (0x19: 16-byte; 0x23: 32-byte) to encrypt UEFI payloads.
Example:
        1. Upgrade from R35.6 to R36 ToT on Jetson AGX Orin Devkit
        sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-agx-orin-devkit R35-6
        2. Upgrade from R35.6 to R36 ToT on Jetson Orin NX/Nano with NVMe device that has 24GiB APP partition
        sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 24GiB jetson-orin-nano-devkit R35-6
        3. Upgrade from R35.6 to R36 ToT on Jetson Orin NX/Nano with NVMe device that has 24GiB APP partition and with rootfs A/B enabled
        sudo ROOTFS_AB=1 ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 24GiB jetson-orin-nano-devkit R35-6

jetson-orin-nano-devkit.conf is used for the Orin NX/Nano devkit.
If you are using the custom carrier board, please use the custom board config and also the custom BSP package since they may include all necessary modification for your board.
Please also confirm you can boot with both BASE_BSP and TARGET_BSP on your custom carrier board before performing image-based OTA.

Do you use sudo when you run l4t_generate_ota_package.sh to generate OTA package?

If you are using the custom carrier board, please use the custom board config and also the custom BSP package since they may include all necessary modification for your board.

Sure, I will use custom config and BSP

Please also confirm you can boot with both BASE_BSP and TARGET_BSP on your custom carrier board before performing image-based OTA.

Here a tricky part, I have device with BASE_BSP(5.1.3) which was flashed by BSP source, its ok
but TARGET_BSP(6.1) was provided by manufacturer in 2 forms:

  • mfi package ( thats how device was installed )
  • BSP source

I will try to flash device from BSP source instead right now to check if its actually working, as their have strange manipulations with source which I dont really understand like:

Do you use sudo when you run l4t_generate_ota_package.sh to generate OTA package?

Yes

Ok, flash from source BSP via command

./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1   -c tools/kernel_flash/flash_l4t_t234_nvme.xml -p "-c bootloader/generic/cfg/flash_t234_qspi.xml"   --showlogs --network usb0 recomputer-orin-j401 internal

Was successful, device are booted and running
flash_3-13_0_20250117-082051.log (48.4 KB)

During this procedure was generated system.img

ls -lah bootloader/system.img*
-rwxr-xr-x 1 root root 6.5G Jan 17 08:18 bootloader/system.img
-rwxr-xr-x 1 root root  55G Jan 17 08:19 bootloader/system.img.raw

When I tried to use them via command

./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB recomputer-orin-j401 R35-5

Target board(RECOMPUTER_ORIN_J401) and base version(R35_5) is not supported
Failed to get the chip id for RECOMPUTER_ORIN_J401
OTA with nvme0n1 is not supported on recomputer-orin-j401
Usage: sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh [options] <target board> <bsp version>
        Where,
                <target board>: target board. Supported boards: jetson-agx-orin-devkit, jetson-agx-orin-devkit-industrial, jetson-orin-nano-devkit.
                <bsp version>: the version of the base BSP. Supported versions: R35-5, R35-6, R36-3, R36-4.
        options:
                -u <PKC key file>: PKC key used for odm fused board
                -v <SBK key file>: Secure Boot Key (SBK) key used for ODM fused board
                -i <enc rfs key file>: Key for disk encryption support
                -s      Skip generating system image.
                -b      Update bootloader only. Only valid if <bsp version> is R36.
                -r      Update rootfs only. Only valid if <bsp version> is R36.
                -o      Specify the script to update rootfs partition.
                -f      Specify the rootfs image to be written to rootfs partition.
                -p      Specify the options directly passed into flash.sh when generating images.
                --external-device <external device>: Specify the external device to be OTAed. Supported devices: nvme0n1.
                  This option is only valid for jetson-orin-nano-devkit.
                -S <size>: Specify the size of rootfs partition on external device. Only valid when --external-device option is set. KiB, MiB, GiB short hands are allowed
                  Ths size set through this option must be the same as the size of rootfs partition on the external device to be OTAed.
                -E <esp image>: Specify the image to update ESP.
                -T <ext num sectors>: Specify the number of the sectors of the external storage device.
                --rootfs-uuid <rootfs UUID>: Specify UUID for rootfs tp be updated through OTA
                --rootfs-b-uuid <rootfs B UUID>: Specify UUID for rootfs B on the device to be updated through OTA.
                --uda-uuid <uda UUID>: Specify UUID for UDA on the device to be updated through OTA.
                --uefi-keys <keys_conf>: Specify UEFI keys configuration file.
                --uefi-enc <UEFI_ENC_key>: Key file (0x19: 16-byte; 0x23: 32-byte) to encrypt UEFI payloads.
Example:
        1. Upgrade from R35.6 to R36 ToT on Jetson AGX Orin Devkit
        sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-agx-orin-devkit R35-6
        2. Upgrade from R35.6 to R36 ToT on Jetson Orin NX/Nano with NVMe device that has 24GiB APP partition
        sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 24GiB jetson-orin-nano-devkit R35-6
        3. Upgrade from R35.6 to R36 ToT on Jetson Orin NX/Nano with NVMe device that has 24GiB APP partition and with rootfs A/B enabled
        sudo ROOTFS_AB=1 ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 24GiB jetson-orin-nano-devkit R35-6

It seems something missing in custom BSP package.
I would suggest you requesting the help from your vendor for this.

Or you can try modifying <Linux_for_Tegra>/tools/ota_tools/version_upgrade/ota_board_specs.conf manually for your custom board config(recomputer-orin-j401) to check if it could help.

HI Kevin,

I added the missing config to ota_board_specs ( values from BSP CI )

jetson_orin_nano_devkit_ota_emmc_r35_r36_spec=(
        ...
        # new orin-nano 8GB seeed
        'boardid=3767;fab=300;boardsku=0003;boardrev=N.2;fuselevel_s=1;chiprev=;chipsku=00:00:00:D6;board=recomputer-orin-j401;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
)

But still error

Target board(RECOMPUTER_ORIN_J401) and base version(R35_5) is not supported
Failed to get the chip id for RECOMPUTER_ORIN_J401
OTA with nvme0n1 is not supported on recomputer-orin-j401
Usage: sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh [options] <target board> <bsp version>

Are there more places to edit? or I missed something?

jetson_orin_nano_devkit_ota_emmc_r35_r36_spec=(
  .... ....
        # orin-nano 8GB
        'boardid=3767;fab=000;boardsku=0003;boardrev=;fuselevel_s=1;chiprev=;chipsku=00:00:00:D5;board=recomputer-orin-j401;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
        ......
)
RECOMPUTER_ORIN_J401_R35_5_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
RECOMPUTER_ORIN_J401_R35_6_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
RECOMPUTER_ORIN_J401_R36_3_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
RECOMPUTER_ORIN_J401_R36_4_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"

Please configure them as above instead.

We would also suggest you requesting the help from your vendor for them since there may be other places in BSP package should be configured for image-based OTA.
Or you have to refer to the scripts to find out what configurations are missing for the custom board.
I think those are the works should be done by Seeed.

Thank you for help

File changed:

jetson_orin_nano_devkit_ota_emmc_r35_r36_spec=(
        # External device
        # orin-nx 16GB
        'boardid=3767;fab=000;boardsku=0000;boardrev=;fuselevel_s=1;chiprev=;chipsku=00:00:00:D3;board=jetson-orin-nano-devkit;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
        # orin-nx 8GB
        'boardid=3767;fab=000;boardsku=0001;boardrev=;fuselevel_s=1;chiprev=;chipsku=00:00:00:D4;board=jetson-orin-nano-devkit;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
        # orin-nano 8GB
        'boardid=3767;fab=000;boardsku=0003;boardrev=;fuselevel_s=1;chiprev=;chipsku=00:00:00:D5;board=recomputer-orin-j401;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
        # orin-nano devkit 8GB
        'boardid=3767;fab=000;boardsku=0005;boardrev=;fuselevel_s=1;chiprev=;chipsku=00:00:00:D5;board=jetson-orin-nano-devkit;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
        # orin-nano 4GB
        'boardid=3767;fab=000;boardsku=0004;boardrev=;fuselevel_s=1;chiprev=;chipsku=00:00:00:D6;board=jetson-orin-nano-devkit;rootdev=nvme0n1p1;bup_type=bl;signed_img_dir=images-R36-ToT'
)
RECOMPUTER_ORIN_J401_R35_5_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
RECOMPUTER_ORIN_J401_R35_6_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
RECOMPUTER_ORIN_J401_R36_3_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
RECOMPUTER_ORIN_J401_R36_4_ALIAS="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"

But still the same

Failed to get the chip id for RECOMPUTER_ORIN_J401
OTA with nvme0n1 is not supported on recomputer-orin-j401

I requested for help from Seeed, but thats can take a lot of time, as how I understood thats pretty rare case

Or you have to refer to the scripts to find out what configurations are missing for the custom board.

First step will be bypass validations what its not supported + to find chip id?

CI scripts from seeed only have chip sku

Validation are can disable by commenting return 1 in scripts, but could you help how I can find chip id for my device? so I can hard coded it in scripts in check whats happen?

You can add more debug messages in ota_validate_params.sh to check what causes the errors.

You can run $ cat /etc/nv_boot_control.confon your board to check the exact board spec information.

From the Github of Seeed, it seems image-based OTA is not mentioned to be supported.
Are you trying to do that manually?
If so, you have to study the scripts in ota_tools and port the missing parts for this custom board.

TNSPEC 3767-300-0003-M.2-1-1-p3509-a02+p3767-0000-
COMPATIBLE_SPEC 3767--0003--1--p3509-a02+p3767-0000-
TEGRA_LEGACY_UPDATE false
TEGRA_BOOT_STORAGE nvme0n1
TEGRA_EMMC_ONLY false
TEGRA_CHIPID 0x23
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0

Chip id = 0x23 = 35?

From the Github of Seeed, it seems image-based OTA is not mentioned to be supported.
Are you trying to do that manually?

We had a call with them, answer was we support it, and a link to github with BSP sources, look like something missing, I will check scripts, thank you

File
tools/ota_tools/version_upgrade/ota_board_specs.conf

Modifed with

T23X_DEVICES=(
        'JETSON_AGX_ORIN_DEVKIT'
        'JETSON_AGX_ORIN_DEVKIT_INDUSTRIAL'
        'JETSON_ORIN_NANO_DEVKIT'
        'RECOMPUTER_ORIN_J401'
)

File l4t_generate_ota_package.sh modified with

SUPPORTED_EXTERNAL_DEVICES=(
        'jetson-agx-orin-devkit:nvme0n1'
        'jetson-agx-orin-devkit-industrial:nvme0n1'
        'jetson-orin-nano-devkit:nvme0n1'
        'recomputer-orin-j401:nvme0n1'
)

Now OTA scripts starts, but stuck in a loop with error

...
[   6.1080 ] Copying signatures
[   6.1092 ] tegrahost_v2 --chip 0x23 0 --partitionlayout flash.xml.bin --updatesig images_list_signed.xml
[   6.1118 ] tegraparser_v2 --generategpt --pt flash.xml.bin
[   6.1128 ] End sector for APP, expected at: 199999966, actual: 0
Error: Return value 4
Command tegraparser_v2 --generategpt --pt flash.xml.bin
cp: cannot stat 'signed/*': No such file or directory
cp: cannot stat 'signed/flash.xml.tmp': No such file or directory
Using bpmp-dtb concatenated with odmdata in blob for t23x
XPath set is empty
...

Not sure how to fix that

Orin Nano is from T234(Orin) series so that chip ID is 0x23.

For this issue, please check the partition layout XML file.
You can refer to How to solve the issue that ssd are not entiely availiable after full disk encryption - #5 by KevinFFF for details.

HI Kevin,

Config file by Seeed contain

<device type="external" instance="0" sector_size="512" num_sectors="200000000" >

Which is 95.36GiB

I changed command from
./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB recomputer-orin-j401 R35-5
To
./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 95GiB recomputer-orin-j401 R35-5

Error remain

[   6.1519 ] End sector for APP, expected at: 199999966, actual: 0
Error: Return value 4

But from logs in crashing on APP sector, which is in config file are

        <partition name="APP" id="1" type="data">
            <allocation_policy> sequential </allocation_policy>
            <filesystem_type> basic </filesystem_type>
            <size> APPSIZE </size>
            <file_system_attribute> 0 </file_system_attribute>
            <allocation_attribute> 0x808 </allocation_attribute>
            <align_boundary> 16384 </align_boundary>
            <percent_reserved> 0 </percent_reserved>
            <unique_guid> APPUUID </unique_guid>
            <filename> APPFILE </filename>
            <description> **Required.** Contains the rootfs. This partition must be assigned
              the "1" for id as it is physically put to the end of the device, so that it
              can be accessed as the fixed known special device `/dev/nvme0n1p1`. </description>
        </partition>

APPSIZE - should be calculated automatically?

Could you please explain what exactly that means? in config layout value for APP are 199999966, but in rootfs image its actually 0?

What’s the exact size of your NVMe SSD and golden system.img.raw?

It is the size used for APP partition. It has been specified by -S 118GiB in your command.

Please configure it as following instead.

<device type="external" instance="0" sector_size="512" num_sectors="419430400" >

and use the following command to create OTA package:

$ sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB recomputer-orin-j401 R35-5

What’s the exact size of your NVMe SSD and golden system.img.raw ?

120GB

$ lsblk -b
nvme0n1      259:0    0 128035676160  0 disk
├─nvme0n1p1  259:1    0 126662262784  0 part /
├─nvme0n1p2  259:2    0    134217728  0 part
├─nvme0n1p3  259:3    0       786432  0 part
├─nvme0n1p4  259:4    0     33161216  0 part
├─nvme0n1p5  259:5    0    134217728  0 part
├─nvme0n1p6  259:6    0       786432  0 part
├─nvme0n1p7  259:7    0     33161216  0 part
├─nvme0n1p8  259:8    0     83886080  0 part
├─nvme0n1p9  259:9    0       524288  0 part
├─nvme0n1p10 259:10   0    314572800  0 part
├─nvme0n1p11 259:11   0     67108864  0 part
├─nvme0n1p12 259:12   0     83886080  0 part
├─nvme0n1p13 259:13   0       524288  0 part
├─nvme0n1p14 259:14   0     67108864  0 part
└─nvme0n1p15 259:15   0    419430400  0 part

golden image size

$ ls -lLh bootloader/system.img*
-rwxr-xr-x 1 root root  31G Jan 22 06:05 bootloader/system.img
-rw-r--r-- 1 root root 118G Jan 16 11:35 bootloader/system.img.raw

$ ls -lL bootloader/system.img*
-rwxr-xr-x 1 root root  32274247412 Jan 22 06:05 bootloader/system.img
-rw-r--r-- 1 root root 126473994240 Jan 16 11:35 bootloader/system.img.raw

num_sectors=“419430400”

That means 200GiB? we set it more so after we can overwrite it by -S 118GiB ?

After this change, command start working

$ sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh -s --external-device nvme0n1 -S 118GiB recomputer-orin-j401 R35-5

But then crashed BUP generation, changed file l4t_generate_ota_package.sh:1110

function generate_BUP()
{
        ...
        # from
        # local __board_spec_file=/tmp/board_spec_file
        # local __board_spec_entry="tmp_board_spec"
        # construct_board_spec_entry "${suffix}" "${__board_spec_entry}" "${__board_spec_file}"

        # to
        local __board_spec_file="${TARGET_BSP}/tools/ota_tools/version_upgrade/ota_board_specs.conf"
        local __board_spec_entry="jetson_orin_nano_devkit_ota_emmc_r35_r36_spec"
        ...
}

After this fix, ota package was generated, while triggered on device was an error:

The board name in OTA package(recomputer-orin-j401) does not match current board(p3509-a02+p3767-0000)

Real board name are p3509-a02+p3767-0000 and recomputer-orin-j401 just an alias? as inside recomputer-orin-j401.conf

source "${LDK_DIR}/p3768-0000-p3767-0000-a0.conf";

update_flash_args_p3768_0000_p3767_0000()
{
        if [ "${board_sku}" = "0004" ]; then
                DTB_FILE=tegra234-j401-p3768-0000+p3767-0004-recomputer.dtb;
        elif [ "${board_sku}" = "0003" ]; then
                DTB_FILE=tegra234-j401-p3768-0000+p3767-0003-recomputer.dtb;
        elif [ "${board_sku}" = "0000" ]; then
                DTB_FILE=tegra234-j401-p3768-0000+p3767-0000-recomputer.dtb;
        elif [ "${board_sku}" = "0001" ]; then
                DTB_FILE=tegra234-j401-p3768-0000+p3767-0001-recomputer.dtb;
        else
                echo "Error: Unrecognized module SKU ${board_sku}";
                exit 1;
        fi

        TBCDTB_FILE="${DTB_FILE}";
}

I ignored board name mismatch, is that ok?

After OTA triggered and device reboot, device no longer responding, investigating

Okay, I thought the physical size of your NVMe SSD is more than 200 GiB.
If your NVMe SSD is only 120GiB, then please configure 251658240 for num_sectors in XML.

Is recomputer-orin-j401.conf created based on p3509-a02+p3767-0000.conf?

This is why I mentioned that you may hit more errors in OTA update if you try to port them manually and you are not the board vendor.

Please just check the error log during generating OTA payload and perform OTA update and fix them.

1 Like

Hi Kevin,

I received from Seeed info, what OTA with this device should work via default jetson-orin-nano-devkit, even its not

I reset all my changed which was done before inside ota folder, generate new package with jetson-orin-nano-devkit config

OTA preparations

Command: ./nv_ota_start.sh /ota/ota_payload_package.tar.gz
/usr/bin/efibootmgr
/usr/bin/efibootdump
/usr/sbin/nvme
Current rootfs is on /dev/nvme0n1
init_ota_log /ota_log
Creating log dir at /ota_log
Create log file at /ota_log/ota_20250127-115558.log
OTA_LOG_FILE=/ota_log/ota_20250127-115558.log
Extract /ota/ota_payload_package.tar.gz
update_nv_boot_control_in_rootfs /ota_work
Warning: Cannot get compatible board name.
3767--0003--1--p3509-a02+p3767-0000-
TNSPEC 3767-300-0003-M.2-1-1-p3509-a02+p3767-0000-
COMPATIBLE_SPEC 3767--0003--1--p3509-a02+p3767-0000-
TEGRA_LEGACY_UPDATE false
TEGRA_BOOT_STORAGE nvme0n1
TEGRA_EMMC_ONLY false
TEGRA_CHIPID 0x23
TEGRA_OTA_BOOT_DEVICE /dev/mtdblock0
TEGRA_OTA_GPT_DEVICE /dev/mtdblock0
Info: Write TegraPlatformCompatSpec with 3767--0003--1--p3509-a02+p3767-0000-.
Info: The esp is not mounted to /boot/efi.
Info: Boot from NVMe - nvme0n1
Info: Active boot storage: nvme0n1
Info: Mount esp uuid=F786-BFFE to /boot/efi.
check_prerequisites
decompress_ota_package ota_package.tar /ota_work
decompress_ota_package: start at Mon 27 Jan 2025 11:58:12 AM UTC
Sha1 checksum for /ota_work/ota_package.tar (5b97cdfb9a5b3238e677f9ff7b9dca95437346cc) matches
decompress_ota_package: end at Mon 27 Jan 2025 11:59:29 AM UTC
nv_ota_update_implement.sh
Command: nv_ota_update_implement.sh
check_target_board /ota_work TARGET_BOARD
The board name in OTA package(jetson-orin-nano-devkit) does not match current board(p3509-a02+p3767-0000)
get_chip_id CHIP_ID
ota_choose_images /ota_work
COMPATIBLE_SPEC=3767--0003--1--p3509-a02+p3767-0000-
TEGRA_CHIPID=0x23
_BOARD_SPEC_NAME=3767--0003-
Copy files from ./images-R36-ToT/3767--0003-/ to ./images-R36-ToT/
is_rootfs_a_b_enabled ROOTFS_AB_ENABLED ROOTFS_CURRENT_SLOT
ROOTFS_AB_ENABLED=0
ROOTFS_CURRENT_SLOT=0
is_rootfs_encryption_enabled ROOTFS_ENC_ENABLED
ROOTFS_ENC_ENABLED=0
get_update_slot UPDATE_SLOT
UPDATE_SLOT=B
get_update_control /ota_work UPDATE_BOOTLOADER UPDATE_ROOTFS
UPDATE_BOOTLOADER=1, UPDATE_ROOTFS=1
check_bsp_version /ota_work BASE_VERSION
base_version=R35 ota_version=R36
BSP version is to be upgraded, update misc partitions in the recovery kernel
clean_up_boot_partition
update_rootfs /ota_work
update_rootfs_with_a_b_disabled /ota_work
update_rootfs_in_recovery /ota_work
force_booting_to_recovery
Force booting to recovery by writing \x07\x00\x00\x00\x03\x00\x00\x00 to UEFI variable L4TDefaultBootMode-781e084c-a330-417c-b678-38e696380cb9
dd if=/tmp/var_tmp.bin of=L4TDefaultBootMode-781e084c-a330-417c-b678-38e696380cb9 bs=8
1+0 records in
1+0 records out
8 bytes copied, 0.0072008 s, 1.1 kB/s
Rootfs is to be updated in recovery kernel once device is rebooted.
check_bootloader_version /ota_work
update_bootloader /ota_work
Bootloader on non-current slot(B) is to be updated once device is rebooted
clean_up_ota_files

After reboot (file can contain first normal boot too )

jetson_minicom.txt (253.3 KB)

Says OTA is successfully completed but unable to boot after that with errors

L4TLauncher: Attempting Direct Boot
EFI stub: Booting Linux Kernel...
EFI stub: ERROR: Invalid header detected on UEFI supplied FDT, ignoring ...
EFI stub: Generating empty DTB
EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
EFI stub: Exiting boot services...

Could you please help me with this error?