Unable to update the Jetpack from R35.6.1 to R36.4.3 with OTA on Orin Device

I can generate the payload successfully on my host

TARGET_BOARD="jetson-orin-nano-devkit"
BSP_VERSION="R35-6"
sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh \
    --external-device nvme0n1 -S 24GiB \
    "$TARGET_BOARD" "$BSP_VERSION"

but, cannot update on target device the following is the error please kindly provide me the way to solve it.

Working directory: /home/anil/ota_workdir
Extracting OTA tools package...
Creating /ota directory...
Starting OTA update...
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
Create log file at /ota_log/ota_20250522-162308.log
OTA_LOG_FILE=/ota_log/ota_20250522-162308.log
Extract /ota/ota_payload_package.tar.gz
update_nv_boot_control_in_rootfs /ota_work
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
3767-000-0000--1--jetson-orin-nano-devkit-
TNSPEC 3767-500-0000--1-1-jetson-orin-nano-devkit-
COMPATIBLE_SPEC 3767-000-0000--1--jetson-orin-nano-devkit-
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-000-0000--1--jetson-orin-nano-devkit-.
Info: The esp is already mounted to /boot/efi.
check_prerequisites
decompress_ota_package ota_package.tar /ota_work
decompress_ota_package: start at Thu 22 May 2025 04:24:01 PM CST
Sha1 checksum for /ota_work/ota_package.tar (cd55eaa361b677e4e9c138026c6dbe45a5ae5cae) matches
decompress_ota_package: end at Thu 22 May 2025 04:24:32 PM CST
nv_ota_update_implement.sh
Command: nv_ota_update_implement.sh
check_target_board /ota_work TARGET_BOARD
get_chip_id CHIP_ID
ota_choose_images /ota_work
COMPATIBLE_SPEC=3767-000-0000--1--jetson-orin-nano-devkit-
TEGRA_CHIPID=0x23
_BOARD_SPEC_NAME=3767-000-0000-
No image is found for compatible SPEC 3767-000-0000-
Failed to call "copy_board_spec_dep_files /ota_work/internal_device"
Failed to run "ota_choose_images /ota_work"

and here is my board info

TNSPEC 3767-500-0000--1-1-jetson-orin-nano-devkit-
COMPATIBLE_SPEC 3767-000-0000--1--jetson-orin-nano-devkit-
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

hello amaranil1996,

did you enable root file system redundancy or disk encryption?
did you download the JetPack 5.1.5 and JetPack 6.2 to your local host machine?
please try setting environment variables, BASE_BSP, TARGET_BSP point to your Jetpack installation path accordingly.
for instance,
$ export BASE_BSP=~/nvidia/nvidia_sdk/JetPack_5.1.5_Linux_JETSON_ORIN_NX_TARGETS/Linux_for_Tegra
$ export TARGET_BSP=~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NX_TARGETS/Linux_for_Tegra


for your reference.
here’re my verification steps to OTA update from Jetpack-5.1.4 to Jetpack-6.1
[Image flashing]
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" --no-flash --network usb0 jetson-orin-nano-devkit internal
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --no-flash --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --external-only --append --network usb0 jetson-orin-nano-devkit external
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --network usb0 --flash-only

[Creating OTA payload]
$ sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 jetson-orin-nano-devkit R35-6

[Starts OTA update from JP-5.1.4 to JP-6.1]
you’ve to copy that created ota_payload_package.tar.gz package to your target.
$ mkdir ota-tool
$ wget https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.0/release/ota_tools_r36.4.0_aarch64.tbz2
$ cd /home/nvidia/ota-tool
$ sudo tar xvpf ../ota_tools_r36.4.0_aarch64.tbz2
$ sudo mkdir /ota
$ sudo mv /tmp/ota_payload_package.tar.gz /ota/
$ cd /home/nvidia/ota-tool/Linux_for_Tegra/tools/ota_tools/version_upgrade
$ sudo ./nv_ota_start.sh /ota/ota_payload_package.tar.gz
$ sudo reboot

Hi @JerryChang I have tried your steps but still having the same issue
these three steps should perfom on Host or Target device I tried on host but third command is not working on host

$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs  -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml"  --no-flash --network usb0 jetson-orin-nano-devkit internal
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --no-flash --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --external-only --append --network usb0 jetson-orin-nano-devkit external
$ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --showlogs --network usb0 --flash-only```

hello amaranil1996,

is it Jetson Orin Nano developer kit?
may I also know your commands to create OTA payload?

Hi JerryChang here is my Boardinfo My device is not Orin Nano Developer kit its orin NX

anil@ubuntu:~/ota-tool$ cat /proc/device-tree/model
NVIDIA Orin NX Developer Kitsmc@ubuntu:~/ota-tool$
anil@ubuntu:~/ota-tool$ cat /proc/device-tree/model
NVIDIA Orin NX Developer Kitsmc@ubuntu:~/ota-tool$ sudo cat /etc/nv_tegra_release
# R35 (release), REVISION: 6.1, GCID: 39721438, BOARD: t186ref, EABI: aarch64, DATE: Tue Mar  4 10:13:09 UTC 2025
anil@ubuntu:~/ota-tool$  sudo cat /etc/nv_boot_control.conf
TNSPEC 3767-500-0000--1-1-jetson-orin-nano-devkit-
COMPATIBLE_SPEC 3767-000-0000--1--jetson-orin-nano-devkit-
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
anil@ubuntu:~/ota-tool$

AND these are my steps in creating the payload Intially I followed the steps from here Software Packages and the Update Mechanism — NVIDIA Jetson Linux Developer Guide 1 documentation but after your solution I added your flashing steps also

#!/bin/bash
# Complete OTA Payload Creation Script with Proper Environment Setup
# Run from: /home/kevin/jetson_ota
# Usage: sudo ./create_ota_payload.sh

set -e

# Configuration
WORK_DIR="/home/anil/jetson_ota"
JETSON_MODEL="jetson-orin-nano-devkit"
BASE_VERSION="R35.6.1"  # JetPack 5.1.5
TARGET_VERSION="R36.4.0"  # JetPack 6.2
BSP_BASE="R35-6"  # Base BSP version for OTA generation
OTA_TOOLS_FILE="ota_tools_${TARGET_VERSION}_aarch64.tbz2"

# Set environment variables
export BASE_BSP="$WORK_DIR/JetPack_${BASE_VERSION%.*}/Linux_for_Tegra"
export TARGET_BSP="$WORK_DIR/JetPack_${TARGET_VERSION%.*}/Linux_for_Tegra"

# Verify existing files
echo "=== Verifying Required Files ==="
required_files=(
    "$WORK_DIR/Jetson_Linux_${BASE_VERSION}_aarch64.tbz2"
    "$WORK_DIR/Jetson_Linux_${TARGET_VERSION}_aarch64.tbz2"
    "$WORK_DIR/$OTA_TOOLS_FILE"
)

for file in "${required_files[@]}"; do
    if [ ! -f "$file" ]; then
        echo "Error: Missing required file - $(basename "$file")"
        exit 1
    fi
done
echo "All required files present."

# Enhanced extraction with binaries application
extract_and_prepare() {
    local version="$1"
    local tbz_file="$WORK_DIR/Jetson_Linux_${version}_aarch64.tbz2"
    local target_dir="$WORK_DIR/JetPack_${version%.*}/Linux_for_Tegra"
    
    if [ -d "$target_dir" ]; then
        echo "=== Using existing extraction: $target_dir ==="
    else
        echo "=== Extracting $tbz_file ==="
        mkdir -p "$target_dir"
        tar -xjf "$tbz_file" -C "$target_dir" --strip-components=1

        # Extract rootfs if exists
        local rootfs_file="$WORK_DIR/Tegra_Linux_Sample-Root-Filesystem_${version}_aarch64.tbz2"
        if [ -f "$rootfs_file" ]; then
            echo "Extracting root filesystem..."
            sudo tar -xjf "$rootfs_file" -C "$target_dir/rootfs"
        fi
    fi

    # Always apply binaries
    echo "=== Applying BSP binaries ==="
    cd "$target_dir"
    if [ -f "apply_binaries.sh" ]; then
        sudo ./apply_binaries.sh
    else
        echo "Warning: apply_binaries.sh not found - some components may be missing"
    fi
}

# Extract OTA tools
extract_ota_tools() {
    echo "=== Extracting OTA Tools ==="
    if [ -f "$TARGET_BSP/tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh" ]; then
        echo "OTA tools already available"
    else
        echo "Extracting $OTA_TOOLS_FILE to $TARGET_BSP/.."
        cd "$TARGET_BSP/.."
        sudo tar -xjf "$WORK_DIR/$OTA_TOOLS_FILE"
    fi
}

# Flash base image
flash_base_image() {
    echo "=== Checking Flash Requirements ==="
    if [ -f "$BASE_BSP/bootloader/system.img" ]; then
        echo "=== Using existing flashed images ==="
        return
    fi

    cd "$BASE_BSP"
    echo "1. Initializing flash..."
    sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
        --showlogs \
        -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
        --no-flash \
        --network usb0 \
        "$JETSON_MODEL" \
        internal

    echo "2. Preparing external storage..."
    sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
        --showlogs \
        --no-flash \
        --external-device nvme0n1p1 \
        -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml \
        --external-only \
        --append \
        --network usb0 \
        "$JETSON_MODEL" \
        external

    # echo "3. Completing flash process..."
    # sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
    #     --showlogs \
    #     --network usb0 \
    #     --flash-only
}

# Generate OTA payload with verification
generate_ota_payload() {
    echo "=== Verifying OTA Tools ==="
    if [ ! -f "$TARGET_BSP/tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh" ]; then
        echo "Error: OTA tools not found in target BSP"
        exit 1
    fi

    echo "=== Generating OTA Payload ==="
    cd "$TARGET_BSP"
    sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh \
        --external-device nvme0n1 \
        "$JETSON_MODEL" \
        "$BSP_BASE"
    
    # if [ -f "/tmp/ota_payload_package.tar.gz" ]; then
    #     echo -e "\n=== OTA Payload Created Successfully ==="
    #     echo "File: /tmp/ota_payload_package.tar.gz"
    #     echo "Size: $(du -h /tmp/ota_payload_package.tar.gz | cut -f1)"
    #     echo "MD5: $(md5sum /tmp/ota_payload_package.tar.gz | cut -d' ' -f1)"
    # else
    #     echo "Error: OTA payload generation failed!"
    #     echo "Check /tmp/ota_gen_* logs for details"
    #     exit 1
    # fi
}

# Main execution
echo "=== Setting Environment ==="
echo "BASE_BSP: $BASE_BSP"
echo "TARGET_BSP: $TARGET_BSP"

extract_and_prepare "$BASE_VERSION"
extract_and_prepare "$TARGET_VERSION"
extract_ota_tools
flash_base_image
generate_ota_payload

echo -e "\n=== Next Steps ==="
echo "1. Copy /tmp/ota_payload_package.tar.gz to your Jetson device:"
echo "   scp /tmp/ota_payload_package.tar.gz nvidia@<jetson-ip>:/tmp/"
echo "2. On Jetson device:"
echo "   sudo mkdir -p /ota"
echo "   sudo mv /tmp/ota_payload_package.tar.gz /ota/"
echo "   tar xf ota_tools_${TARGET_VERSION}_aarch64.tbz2"
echo "   cd Linux_for_Tegra/tools/ota_tools/version_upgrade"
echo "   sudo ./nv_ota_start.sh /ota/ota_payload_package.tar.gz"
echo "   sudo reboot"

This version of ota_tools contains significant updates that should simplify its use.

Here’s two scripts that may be helpful to create and apply OTA Image update; proofread before use.
create_ota_payload.sh.txt (2.3 KB)
ota_image_upgrade.sh.txt (2.3 KB)

Here’s some other command line options that can be implemented.

Usage: sudo ./l4t_generate_ota_package.sh [options]
Where,
: target board. Supported boards: jetson-agx-orin-devkit, jetson-agx-orin-devkit-industrial, jetson-orin-nano-devkit.
: the version of the base BSP. Supported versions: R35-5, R35-6, R36-3, R36-4.
options:
-u : PKC key used for odm fused board
-v : Secure Boot Key (SBK) key used for ODM fused board
-i : Key for disk encryption support
-s Skip generating system image.
-b Update bootloader only. Only valid if is R36.
-r Update rootfs only. Only valid if 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 : Specify the external device to be OTAed. Supported devices: nvme0n1.
This option is only valid for jetson-orin-nano-devkit.
-S : 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 : Specify the image to update ESP.
-T : Specify the number of the sectors of the external storage device.
–rootfs-uuid : Specify UUID for rootfs tp be updated through OTA
–rootfs-b-uuid : Specify UUID for rootfs B on the device to be updated through OTA.
–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 ./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 ./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 ./l4t_generate_ota_package.sh --external-device nvme0n1 -S 24GiB jetson-orin-nano-devkit R36-4

Hi whitesscott I followed your script and can generate the payload successfully on host but still getting same error as above while running this patch on target device.

hello amaranil1996,

did you extract the OTA tools correctly?
for instance, you should download/extract [OTA Tools r35.6.1] to R35.6.1 working directory,
and, [OTA Tools r36.4.0] to R36.4.0 working directory.

Something like this, or just run the steps manually so you can see what is in ota_package.tar and modify to resolve the error
No image is found for compatible SPEC 3767-000-0000-

#!/usr/bin/env bash
set -euo pipefail

WORK=/tmp/ota_fix
rm -rf “$WORK” && mkdir -p “$WORK”/{inner,out}

#1. extract the inner tar from the outer tar.gz
tar -xzf ota_payload_package.tar.gz -C “$WORK/inner” ota_package.tar

#2. unpack ota_package.tar
tar -xf “$WORK/inner/ota_package.tar” -C “$WORK/out”

#3. make edits here. For example, copy the missing board-spec folder to the location nv_ota_start.sh expects it.
cp -a “$TARGET_BSP”/bootloader/signed/*/images-R36-4.3/3767-000-0000-
“$WORK/out/internal_device/images-R36-4.3/”

#4. re-pack the modified ota_package.tar
rm “$WORK/inner/ota_package.tar”
tar -cf “$WORK/inner/ota_package.tar” -C “$WORK/out” .
mv ota_payload_package_fixed.tar.gz original_ ota_payload_package_fixed.tar.gz

#5. build a new outer tar.gz that contains the new ota_package.tar
tar -C “$WORK/inner” -czf ota_payload_package.tar.gz ota_package.tar


Or from function construct_board_spec_name() in l4t_generate_ota_package.sh

    # For jetson-orin-nano-devkit, set the boardver to null if boardsku is 0001,
    # 0003, 0004 or 0005.
    l_boardid="${boardid}"
    l_boardver="${fab}"
    l_boardsku="${boardsku}"
    l_boardrev="${boardrev}"

#on line 229 if your l_boardver=“${fab}” == 0 from above logic then maybe delete the trailing - {dash} so there’s not two dashes would fix the generation issue that you ran into upon running nv_ota_start.sh.

    name="${l_boardid}-${l_boardver}-${l_boardsku}-${l_boardrev}"

I have done the step by step manually with out any script still same problem on the target device

nvidia@ubuntu:~/anil$ sudo tar xpf $WORKDIR/ota_tools_R36.4.3_aarch64.tbz2 -C $WORKDIR
nvidia@ubuntu:~/anil$ sudo mkdir -p /ota
nvidia@ubuntu:~/anil$ sudo mv $WORKDIR/ota_payload_package.tar.gz /ota/
nvidia@ubuntu:~/anil$ cd $WORKDIR/Linux_for_Tegra/tools/ota_tools/version_upgrade
nvidia@ubuntu:~/ota_workspace/Linux_for_Tegra/tools/ota_tools/version_upgrade$ sudo ./nv_ota_start.sh /ota/ota_payload_package.tar.gz
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
Create log file at /ota_log/ota_20250527-142640.log
OTA_LOG_FILE=/ota_log/ota_20250527-142640.log
Extract /ota/ota_payload_package.tar.gz
update_nv_boot_control_in_rootfs /ota_work
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
/ota_work/nv-l4t-bootloader-config.sh: line 547: warning: command substitution: ignored null byte in input
3767-000-0000--1--jetson-orin-nano-devkit-
TNSPEC 3767-500-0000--1-1-jetson-orin-nano-devkit-
COMPATIBLE_SPEC 3767-000-0000--1--jetson-orin-nano-devkit-
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-000-0000--1--jetson-orin-nano-devkit-.
Info: The esp is already mounted to /boot/efi.
check_prerequisites
decompress_ota_package ota_package.tar /ota_work
decompress_ota_package: start at Tue 27 May 2025 02:27:51 PM CST
Sha1 checksum for /ota_work/ota_package.tar (202fbb6b2e4c7e84ef0cfa15160416ff4bedd1bb) matches
decompress_ota_package: end at Tue 27 May 2025 02:28:21 PM CST
nv_ota_update_implement.sh
Command: nv_ota_update_implement.sh
check_target_board /ota_work TARGET_BOARD
get_chip_id CHIP_ID
ota_choose_images /ota_work
COMPATIBLE_SPEC=3767-000-0000--1--jetson-orin-nano-devkit-
TEGRA_CHIPID=0x23
_BOARD_SPEC_NAME=3767-000-0000-
No image is found for compatible SPEC 3767-000-0000-
Failed to call "copy_board_spec_dep_files /ota_work/internal_device"
Failed to run "ota_choose_images /ota_work"
nvidia@ubuntu:~/ota_workspace/Linux_for_Tegra/tools/ota_tools/version_upgrade$

hello amaranil1996,

I doubt why it’s looking for images from internal_device directory.
you’re working with external storage (i.e. NVMe), right?

yes Jerry I am working with Nvme, Is there any other info that I can provide for solving this issue?

hello amaranil1996,

is it Jetson Orin NX developer kit? or.. you’re using a customize board?

Sorry, I edited my above post instead of doing a new post as there were no other posts. So unless I’ve been looking at the ota_tools too long it might be helpful.

Hi Jerry I am using Jetson Orin kit the following the is more info for your reference

nvidia@ubuntu:~$ cat /proc/device-tree/model | tr -d '\0'
NVIDIA Orin NX Developer Kitnvidia@ubuntu:~$
nvidia@ubuntu:~$ cat /proc/device-tree/model | tr -d '\0'
NVIDIA Orin NX Developer Kitnvidia@ubuntu:~$ lspci | grep -i nvidia
0001:00:00.0 PCI bridge: NVIDIA Corporation Device 229e (rev a1)
0004:00:00.0 PCI bridge: NVIDIA Corporation Device 229c (rev a1)
0008:00:00.0 PCI bridge: NVIDIA Corporation Device 229c (rev a1)
nvidia@ubuntu:~$ cat /etc/nv_boot_control.conf
TNSPEC 3767-500-0000--1-1-jetson-orin-nano-devkit-
COMPATIBLE_SPEC 3767-000-0000--1--jetson-orin-nano-devkit-
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
nvidia@ubuntu:~$ sudo nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     YCA12301090060016    M.2 (P80) 3TE6                           1         120.03  GB / 120.03  GB    512   B +  0 B   V2111873
nvidia@ubuntu:~$

hello amaranil1996,

could you please extract the payload you’ve created for double check.
for instance,
$ sudo mkdir tmp && cd tmp
$ sudo tar xvpf $OUT/Linux_for_Tegra/bootloader/p3768-xxxx/ota_payload_package.tar.gz
$ cat version.txt

and..
$ sudo mkdir ota_package && cd ota_package
$ sudo tar xvpf ../ota_package.tar
$ tree

Hi Jerry here is the Info of above steps

nvidia@ubuntu:~/tmp$ sudo tar xvpf /ota/ota_payload_package.tar.gz
./base_recovery/
./base_recovery/bin/
./base_recovery/bin/uname
./base_recovery/bin/wc
./base_recovery/bin/sfdisk
./base_recovery/bin/mtd_debug
./base_recovery/bin/partprobe
./base_recovery/bin/sgdisk
./base_recovery/bin/findmnt
./base_recovery/bin/cpio
./base_recovery/lib/
./base_recovery/lib/aarch64-linux-gnu/
./base_recovery/lib/aarch64-linux-gnu/libfdisk.so.1
./base_recovery/lib/aarch64-linux-gnu/libparted.so.2
./base_recovery/lib/aarch64-linux-gnu/libgcc_s.so.1
./base_recovery/lib/aarch64-linux-gnu/libstdc++.so.6
./base_recovery/lib/aarch64-linux-gnu/libpopt.so.0
./base_version
./board_name
./BOOTAA64.efi
./layout_change
./nv-l4t-bootloader-config.sh
./nv_ota_common.func
./nv_ota_common_utils.func
./nv_ota_customer.conf
./nv_ota_preserve_data.sh
./nv_ota_rootfs_updater.sh
./nv_ota_run_tasks.sh
./nv_ota_update_alt_part.func
./nv_ota_update_rootfs_in_recovery.sh
./nv_ota_update.sh
./nv_ota_validate.sh
./ota_nv_boot_control.conf
./ota_package.tar
./ota_package.tar.sha1sum
./TEGRA_BL.Cap
./update_control
./user_release_version
./version.txt
nvidia@ubuntu:~/tmp$ cat version.txt
NV4
# R36 , REVISION: 4.3
BOARDID=3767 BOARDSKU=0004 FAB=000
20250527140226
0x240403
BYTES:85 CRC32:7BE20EB9
nvidia@ubuntu:~/tmp$ cd ..
nvidia@ubuntu:~$ cd tmp/
nvidia@ubuntu:~/tmp$ sudo mkdir ota_package && cd ota_package
nvidia@ubuntu:~/tmp/ota_package$ sudo tar xvpf /ota/ota_payload_package.tar.gz
./base_recovery/
./base_recovery/bin/
./base_recovery/bin/uname
./base_recovery/bin/wc
./base_recovery/bin/sfdisk
./base_recovery/bin/mtd_debug
./base_recovery/bin/partprobe
./base_recovery/bin/sgdisk
./base_recovery/bin/findmnt
./base_recovery/bin/cpio
./base_recovery/lib/
./base_recovery/lib/aarch64-linux-gnu/
./base_recovery/lib/aarch64-linux-gnu/libfdisk.so.1
./base_recovery/lib/aarch64-linux-gnu/libparted.so.2
./base_recovery/lib/aarch64-linux-gnu/libgcc_s.so.1
./base_recovery/lib/aarch64-linux-gnu/libstdc++.so.6
./base_recovery/lib/aarch64-linux-gnu/libpopt.so.0
./base_version
./board_name
./BOOTAA64.efi
./layout_change
./nv-l4t-bootloader-config.sh
./nv_ota_common.func
./nv_ota_common_utils.func
./nv_ota_customer.conf
./nv_ota_preserve_data.sh
./nv_ota_rootfs_updater.sh
./nv_ota_run_tasks.sh
./nv_ota_update_alt_part.func
./nv_ota_update_rootfs_in_recovery.sh
./nv_ota_update.sh
./nv_ota_validate.sh
./ota_nv_boot_control.conf
./ota_package.tar
./ota_package.tar.sha1sum
./TEGRA_BL.Cap
./update_control
./user_release_version
./version.txt
nvidia@ubuntu:~/tmp/ota_package$ tree
.
├── base_recovery
│   ├── bin
│   │   ├── cpio
│   │   ├── findmnt
│   │   ├── mtd_debug
│   │   ├── partprobe
│   │   ├── sfdisk
│   │   ├── sgdisk
│   │   ├── uname
│   │   └── wc
│   └── lib
│       └── aarch64-linux-gnu
│           ├── libfdisk.so.1
│           ├── libgcc_s.so.1
│           ├── libparted.so.2
│           ├── libpopt.so.0
│           └── libstdc++.so.6
├── base_version
├── board_name
├── BOOTAA64.efi
├── layout_change
├── nv-l4t-bootloader-config.sh
├── nv_ota_common.func
├── nv_ota_common_utils.func
├── nv_ota_customer.conf
├── nv_ota_preserve_data.sh
├── nv_ota_rootfs_updater.sh
├── nv_ota_run_tasks.sh
├── nv_ota_update_alt_part.func
├── nv_ota_update_rootfs_in_recovery.sh
├── nv_ota_update.sh
├── nv_ota_validate.sh
├── ota_nv_boot_control.conf
├── ota_package.tar
├── ota_package.tar.sha1sum
├── TEGRA_BL.Cap
├── update_control
├── user_release_version
└── version.txt

4 directories, 35 files
nvidia@ubuntu:~/tmp/ota_package$

hello amaranil1996,

it looks an incomplete ota_package.
there should be internal_device/ or external_device/ folder created (it depends-on your commands).
and, under the folder it’ll contain boot.img, flash.idx, kernel_tegra234-p3768-0000+p3767-0003.dtb..etc.

Hi Jerry I have used this command to generate my payload and there is any error during payload generation

sudo -E ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh --external-device nvme0n1 -S 24GiB jetson-orin-nano-devkit R35-6

Payload log

|                   VER | 36909620 |       109 |   3643  |    0    | 3767-000-0005--1-0-jetson-orin-nano-devkit- |
|         secondary_gpt | 36909729 |     16896 |   3643  |    0    | 3767-000-0000--1-0-jetson-orin-nano-devkit- |
|         secondary_gpt | 36926625 |     16896 |   3643  |    0    | 3767-000-0001--1-0-jetson-orin-nano-devkit- |
|         secondary_gpt | 36943521 |     16896 |   3643  |    0    | 3767-000-0003--1-0-jetson-orin-nano-devkit- |
|         secondary_gpt | 36960417 |     16896 |   3643  |    0    | 3767-000-0004--1-0-jetson-orin-nano-devkit- |
|         secondary_gpt | 36977313 |     16896 |   3643  |    0    | 3767-000-0005--1-0-jetson-orin-nano-devkit- |


SUCCESS: contents of the BUP
Generate UEFI capsule by running command: /home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/generate_capsule/l4t_generate_soc_capsule.sh -i /home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/bootloader/payloads_t23x/bl_only_payload -o /home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/ota_base_dir_tmp/TEGRA_BL.Cap t234
Warning. The signer private certificate is not set, the test certificate TestCert.pem is used!
Warning. The other public certificate is not set, the test certificate TestSub.pub.pem is used!
Warning. The trusted public certificate is not set, the test certificate TestRoot.pub.pem is used!
Read binary input file /home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/bootloader/payloads_t23x/bl_only_payload
FMP_PAYLOAD_HEADER.Signature              = 3153534D (MSS1)
FMP_PAYLOAD_HEADER.HeaderSize             = 00000010
FMP_PAYLOAD_HEADER.FwVersion              = 00240403
FMP_PAYLOAD_HEADER.LowestSupportedVersion = 00240403
sizeof (Payload)                          = 02347CA1
"openssl" smime -sign -binary -outform DER -md sha256 -signer "/home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/generate_capsule/Pkcs7Sign/TestCert.pem" -certfile "/home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/generate_capsule/Pkcs7Sign/TestSub.pub.pem"
EFI_FIRMWARE_IMAGE_AUTHENTICATION.MonotonicCount                = 0000000000000001
EFI_FIRMWARE_IMAGE_AUTHENTICATION.AuthInfo.Hdr.dwLength         = 00000AED
EFI_FIRMWARE_IMAGE_AUTHENTICATION.AuthInfo.Hdr.wRevision        = 0200
EFI_FIRMWARE_IMAGE_AUTHENTICATION.AuthInfo.Hdr.wCertificateType = 0EF1
EFI_FIRMWARE_IMAGE_AUTHENTICATION.AuthInfo.CertType             = 4AAFD29D-68DF-49EE-8AA9-347D375665A7
sizeof (EFI_FIRMWARE_IMAGE_AUTHENTICATION.AuthInfo.CertData)    = 00000AD5
sizeof (Payload)                                                = 02347CB1
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER.Version             = 00000001
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER.EmbeddedDriverCount = 00000000
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER.PayloadItemCount    = 00000001
EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER.ItemOffsetList      =
  0000000000000010
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.Version                = 00000003
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageTypeId      = BF0D4599-20D4-414E-B2C5-3595B1CDA402
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageIndex       = 00000001
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateImageSize        = 023487A6
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateVendorCodeSize   = 00000000
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.UpdateHardwareInstance = 0000000000000000
EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.ImageCapsuleSupport    = 0000000000000001
sizeof (Payload)                                                    = 023487A6
sizeof (VendorCodeBytes)                                            = 00000000
EFI_CAPSULE_HEADER.CapsuleGuid      = 6DCBD5ED-E82D-4C44-BDA1-7194199AD92A
EFI_CAPSULE_HEADER.HeaderSize       = 00000020
EFI_CAPSULE_HEADER.Flags            = 00000000
  OEM Flags                         = 0000
EFI_CAPSULE_HEADER.CapsuleImageSize = 02348806
sizeof (Payload)                    = 023487E6
Write binary output file /home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/ota_base_dir_tmp/TEGRA_BL.Cap
Success
UEFI capsule is successfully generated at /home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/ota_base_dir_tmp/TEGRA_BL.Cap
Building bin/lib from base BSP(/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra)
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/bin/cpio' -> 'bin/cpio'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/bin/findmnt' -> 'bin/findmnt'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/bin/uname' -> 'bin/uname'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/bin/wc' -> 'bin/wc'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/sbin/mtd_debug' -> 'bin/mtd_debug'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/sbin/sfdisk' -> 'bin/sfdisk'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/sbin/sgdisk' -> 'bin/sgdisk'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/sbin/partprobe' -> 'bin/partprobe'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/lib/aarch64-linux-gnu/libfdisk.so.1' -> 'lib/aarch64-linux-gnu/libfdisk.so.1'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/lib/aarch64-linux-gnu/libpopt.so.0' -> 'lib/aarch64-linux-gnu/libpopt.so.0'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/lib/aarch64-linux-gnu/libstdc++.so.6' -> 'lib/aarch64-linux-gnu/libstdc++.so.6'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/lib/aarch64-linux-gnu/libgcc_s.so.1' -> 'lib/aarch64-linux-gnu/libgcc_s.so.1'
'/home/kevin/jetson_ota/R35.6.1/Linux_for_Tegra/rootfs/usr/lib/aarch64-linux-gnu/libparted.so.2' -> 'lib/aarch64-linux-gnu/libparted.so.2'
./base_recovery/
./base_recovery/bin/
./base_recovery/bin/uname
./base_recovery/bin/wc
./base_recovery/bin/sfdisk
./base_recovery/bin/mtd_debug
./base_recovery/bin/partprobe
./base_recovery/bin/sgdisk
./base_recovery/bin/findmnt
./base_recovery/bin/cpio
./base_recovery/lib/
./base_recovery/lib/aarch64-linux-gnu/
./base_recovery/lib/aarch64-linux-gnu/libfdisk.so.1
./base_recovery/lib/aarch64-linux-gnu/libparted.so.2
./base_recovery/lib/aarch64-linux-gnu/libgcc_s.so.1
./base_recovery/lib/aarch64-linux-gnu/libstdc++.so.6
./base_recovery/lib/aarch64-linux-gnu/libpopt.so.0
./base_version
./board_name
./BOOTAA64.efi
./layout_change
./nv-l4t-bootloader-config.sh
./nv_ota_common.func
./nv_ota_common_utils.func
./nv_ota_customer.conf
./nv_ota_preserve_data.sh
./nv_ota_rootfs_updater.sh
./nv_ota_run_tasks.sh
./nv_ota_update_alt_part.func
./nv_ota_update_rootfs_in_recovery.sh
./nv_ota_update.sh
./nv_ota_validate.sh
./ota_nv_boot_control.conf
./ota_package.tar
./ota_package.tar.sha1sum
./TEGRA_BL.Cap
./update_control
./user_release_version
./version.txt

SUCCESS: generate OTA package at "/home/kevin/jetson_ota/R36.4.3/Linux_for_Tegra/bootloader/jetson-orin-nano-devkit/ota_payload_package.tar.gz"

hello amaranil1996,

I would like to double check your BOARDID, FAB, BOARDSKU, and CHIP_SKU,
could you please re-cap the board information parsed by flash commands for reference.
it shall looks like this..

###############################################################################
# L4T BSP Information:
# R36 , REVISION: 4.3
# User release: 0.0
###############################################################################
Board ID(3767) version(000) sku(0000) revision()
Preset RAMCODE is 
Chip SKU(00:00:00:D3) ramcode() fuselevel(fuselevel_production) board_FAB(000)
emc_opt_disable_fuse:(0)
...