以前在 TK1 的時代,要更新 Rootfs、kernel 以及 u-boot 等等…都需要使用 flash .sh 這個 tool 來重燒機器。現在我們可以使用 Nvidia 發布的 OTA 工具來更新機器。目前 OTA 只支援 Jetson Xavier NX 、Jetson AGX Xavier series 和 Jetson TX2 series 。

目前最新的 L4T 是 r32.6。可以透過 OTA 升級至 r32.6 的 L4T 版本如下表所示。

升級至r32.6
載板
模組
可從哪個版本升級
NVIDIA Jetson TX2
原始的Jetson TX2 module (不含Jetson TX2i 、Jetson TX2 4GB等等)
r28.2、r28.3、r28.4、r32.1、r32.2、r32.3、r32.4、r32.5
NVIDIA Jetson TX2 NX
Jetson TX2 NX
r32.5
NVIDIA® Jetson AGX Xavier™
所有 Jetson AGX Xavier 系列的模組
r32.1、r32.2、r32.3、r32.4、r32.5
NVIDIA Jetson Xavier NX
所有 Jetson Xavier NX 模組
r32.4、r32.5

 

本文將對 Jetson Xavier NX eMMC (P3668-0001) 模組 從r32.4.4 升級至 r32.5.2 做測試。

 

 

1. 下載安裝 L4T

請至官網下載L4T。如果要從r32.4升級至 r32.5的話,需要下載三個不同的L4T版本。一個是從哪個版本開始升級 (例如 r32.4.4) 、升級到哪個版本(例如 r32.5.2) 、目前 Nvidia 最新release的版本 (例如 r32.6.1)。

選擇L4T版本

 

建立三個資料夾。分別為 L4T_r32-4-4 、 L4T_r32-5-2 和 L4T_r32-6-1。
將下載下來的 Tegra186_Linux_<rel>_aarch64.tbz2 和 Tegra_Linux_Sample-Root-Filesystem_<rel>_aarch64.tbz2 放入相對應的資料夾。然後分別執行以下指令 將 Linux_for_Tegra 準備好。

$ tar xpf Tegra186_Linux_<rel>_aarch64.tbz2
$ cd Linux_for_Tegra/rootfs/
$ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_<rel>_aarch64.tbz2
$ cd ..
$ sudo ./apply_binaries.sh

其中 <rel> 為 R32.4.4 、R32.5.2 和 R32.6.1。

2. 下載 ota_tool

一樣至官網下載 Nvidia發布的ota_tool 。但是要去下載最新發布的版本。以本文寫作的時間點為 r32.6.1。

下載ota_tool

將下載下來的 ota_tools_R32.6.1_aarch64.tbz2 放置於與L4T_r32-4-4 、 L4T_r32-5-2 和 L4T_r32-6-1同一層目錄。

3. 編譯 ota_payload_package.tar.gz 

在同一層目錄底下新增一 build.sh 內容為:

#!/bin/bash
 
dir=`pwd`
OTA_FILE_PATH=${dir}/ota_tools_R32.6.1_aarch64.tbz2
BASE_BSP_VERSION=R32-4
 
export BASE_BSP=${dir}/L4T_r32-4-4/Linux_for_Tegra/
export TARGET_BSP=${dir}/L4T_r32-5-2/Linux_for_Tegra/
export ToT_BSP=${dir}/L4T_r32-6-1/Linux_for_Tegra/
 
#Step 4
tar xpf ${OTA_FILE_PATH} -C ${ToT_BSP}/../
#Step 8
tar xpf ${OTA_FILE_PATH} -C ${TARGET_BSP}/../
 
#Step 9
cd ${TARGET_BSP}
cp ${ToT_BSP}/tools/ota_tools/version_upgrade/* ./tools/ota_tools/version_upgrade
 
cd ${dir}
 
#Step 10
cd ${TARGET_BSP}
cp ./bootloader/smd_info.cfg ./tools/ota_tools/version_upgrade/smd_info.boot_slot_A.cfg
cp ./bootloader/smd_info.cfg ./tools/ota_tools/version_upgrade/smd_info.boot_slot_B.cfg
sed -i -e 's/^15/# 15/' -e 's/^##15/15/' -e 's/^##14/14/' ./tools/ota_tools/version_upgrade/smd_info.boot_slot_A.cfg
sed -i -e 's/^15/# 15/' -e 's/^##15/14/' -e 's/^##14/15/' ./tools/ota_tools/version_upgrade/smd_info.boot_slot_B.cfg
./bootloader/nv_smd_generator ./tools/ota_tools/version_upgrade/smd_info.boot_slot_A.cfg ./tools/ota_tools/version_upgrade/slot_metadata.bin.A
./bootloader/nv_smd_generator ./tools/ota_tools/version_upgrade/smd_info.boot_slot_B.cfg ./tools/ota_tools/version_upgrade/slot_metadata.bin.B
 
cd ${dir}
 
#Step 11
cd ${TARGET_BSP}
mv ./flash.sh ./flash.sh.backup
cp ${ToT_BSP}/flash.sh ./
mv ./l4t_sign_image.sh ./l4t_sign_image.sh.backup
cp ${ToT_BSP}/l4t_sign_image.sh ./
mv ./l4t_sign_image.sh ./l4t_sign_image.sh.backup
cp ${ToT_BSP}/l4t_sign_image.sh ./
mv ./l4t_generate_soc_bup.sh ./l4t_generate_soc_bup.sh.backup
cp ${ToT_BSP}/l4t_generate_soc_bup.sh ./
mv ./bootloader/tegraparser_v2 ./bootloader/tegraparser_v2.backup
cp ${ToT_BSP}/bootloader/tegraparser_v2 ./bootloader/
mv ./bootloader/tegraflash.py ./bootloader/tegraflash.py.backup
cp ${ToT_BSP}/bootloader/tegraflash.py ./bootloader/
mv ./bootloader/tegrahost_v2 ./bootloader/tegrahost_v2.backup
cp ${ToT_BSP}/bootloader/tegrahost_v2 ./bootloader/
mv ./bootloader/tegrabct_v2 ./bootloader/tegrabct_v2.backup
cp ${ToT_BSP}/bootloader/tegrabct_v2 ./bootloader/
mv ./bootloader/tegraflash_internal.py ./bootloader/tegraflash_internal.py.backup
cp ${ToT_BSP}/bootloader/tegraflash_internal.py ./bootloader/
cp ${ToT_BSP}/bootloader/tegrasign_v3_util.py ./bootloader/
cp ${ToT_BSP}/bootloader/tegrasign_v3_internal.py ./bootloader/
cp ${ToT_BSP}/bootloader/tegrasign_v3.py ./bootloader/
cp ${ToT_BSP}/bootloader/tegraopenssl ./bootloader/
sudo mv ./rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh ./rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh.backup
sudo cp ${ToT_BSP}/rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh ./rootfs/opt/nvidia/l4t-bootloader-config/nv-l4t-bootloader-config.sh
sudo mv ./rootfs/usr/sbin/nvbootctrl ./rootfs/usr/sbin/nvbootctrl.backup
sudo cp ${ToT_BSP}/rootfs/usr/sbin/nvbootctrl ./rootfs/usr/sbin/nvbootctrl
sudo mv ./rootfs/usr/sbin/nv_bootloader_payload_updater ./rootfs/usr/sbin/nv_bootloader_payload_updater.backup
sudo cp ${ToT_BSP}/rootfs/usr/sbin/nv_bootloader_payload_updater ./rootfs/usr/sbin/nv_bootloader_payload_updater
sudo mv ./rootfs/usr/sbin/nv_update_engine ./rootfs/usr/sbin/nv_update_engine.backup
sudo cp ${ToT_BSP}/rootfs/usr/sbin/nv_update_engine ./rootfs/usr/sbin/nv_update_engine
echo "SMDFILE=\"slot_metadata.bin\";" >>p2771-0000.conf.common
echo "SMDFILE=\"slot_metadata.bin\";" >>p2972-0000.conf.common
echo "SMDFILE=\"slot_metadata.bin\";" >>p3668.conf.common
 
cd ${dir}
 
#Step 12
cd ${TARGET_BSP}/
sudo ./tools/ota_tools/version_upgrade/build_base_recovery_image.sh jetson-xavier-nx-devkit-emmc ${BASE_BSP_VERSION} ${BASE_BSP} ${BASE_BSP}/rootfs ${TARGET_BSP}
 
cd ${dir}
 
#Step 13
cd ${TARGET_BSP}
sudo ./tools/ota_tools/version_upgrade/l4t_generate_ota_package.sh jetson-xavier-nx-devkit-emmc ${BASE_BSP_VERSION}
 
cd ${dir}
 

存檔後,執行以下命令產生 ota_payload_package.tar.gz 。

$ sudo ./build.sh

這個Script的內容主要是根據官網的ota步驟所寫的。如果你的 TARGET_BSP 和TOT_BSP 是一樣的,比如說都是 R32.6.1。那就可以執行完 Step 4 後直接跳到Step 12。

最後 ota_payload_package.tar.gz 會生成於 L4T_r32-5-2/Linux_for_Tegra/bootloader/jetson-xavier-nx-devkit-emmc 底下。

4. 測試 ota_payload_package.tar.gz 

首先在 Jetson Xavier NX 上的 /boot/extlinux/extlinux.conf 確定是否有以下的設定。如果沒有請加上去。

Init RD

INITRD /boot/initrd
 

Kerenl Command Line

root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4
 

確定有以上的設定後,建立一資料夾名為 ota,並將ota_payload_package.tar.gz 以及 ota_tools_R32.6.1_aarch64.tbz2 複製進ota資料夾中。

解壓縮ota_tools_R32.6.1_aarch64.tbz2。

$ cd ota
$ tar -xvpjf ota_tools_R32.6.1_aarch64.tbz2

執行OTA。

$ cd ota
$ export WORKDIR=${PWD}
$ cd Linux_for_Tegra/tools/ota_tools/version_upgrade
$ sudo ./nv_ota_start.sh /dev/mmcblk0 ${WORKDIR}/ota_payload_package.tar.gz


如果都沒有問題的話,Jetson Xavier NX 重新開機並執行OTA。

那之後就可以設計一個OTA的Server,將 ota_payload_package.tar.gz 下載到機器上。然後驗證package的正確性後,便觸發OTA。

 

參考連結

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/updating_jetson_and_host.html#wwpID0E0UI0HA

arrow
arrow
    創作者介紹
    創作者 阿轟師 的頭像
    阿轟師

    阿轟師與他的快樂夥伴

    阿轟師 發表在 痞客邦 留言(0) 人氣()