NVIDIA JetPackとL4T(Jetson Linux)のアップグレード方法 (OTA)

# 概要

* JetPackとL4T(Jetson Linux)をインストール後にアップグレードする方法
    * 従来のように、イメージを書き換える必要がない
    * ユーザデータも保存されたままになる
    * JetPack4.3以上に追加された機能

* L4T(Jetson Linux)とは
    * JetsonのOS、ドライバ、カーネル群
        * https://developer.nvidia.com/embedded/linux-tegra
    * L4TからJetson Linuxへ名称変更
* JetPackとは
    * Jesonのライブラリ、SDK
        * https://developer.nvidia.com/embedded/jetpack

# 動作確認環境

* Jetson NX Xavier
  * JetPack 4.3 (r32.3.1)
    * JetPack 4.6.1 (r32.6.1)へアップグレード 
  * JetPack 5.0.2 (r35.1.0)
    * JetPack 5.1.1 (r35.3.1)へアップグレード 

# 方法

## 条件

* JetPack4.3以上がインストール済み
* マイナーアップデートのみ可能

:::note warn
**警告**
以下に記載の方法では、メジャーアップデートは不可能。
可能なのはマイナーアップデートのみ。(r35.1 -> r35.2など)
メジャーアップデートした場合、Jetsonが起動不能になる。
:::

## 手順

L4T(Jetson Linux)をアップグレードしたあとに、JetPackをアップグレードする。

### L4T (Jetson Linux)のアップグレード

#### 現状バージョンの確認

```bash
$ cat /etc/nv_tegra_release
```

結果例 (32.3.1)

```
# R32 (release), REVISION: 3.1, GCID: 18186506, BOARD: t210ref, EABI: aarch64, DATE: Tue Dec 10 06:58:34 UTC 2019
```

JetPackバージョンとL4Tバージョンの関係

|JetPackバージョン|L4Tバージョン|
|---|---|
|5.1.1|35.3.1|
|5.1|35.2.1|
|5.0.2|35.1|
|5.0.1 Developer Preview|34.1.1|
|5.0 Developer Preview|34.1|
|4.6|32.6.1|
|4.5.1|32.5.1|
|4.5|32.5|
|4.4.1|32.4.4|
|4.4|32.4.3|
|4.4 Developer Preview|32.4.2|
|4.3|32.3.1|

https://developer.nvidia.com/embedded/jetpack-archive

#### ポイントリリースアップグレード (例：32.4.1から32.4.2）

バグ修正などのアップグレード。通常のapt upgradeコマンドを実行。
```bash
sudo apt update
sudo apt upgrade
```
完了後に再起動する。

#### マイナーアップデート

##### JetPack5系 (例：JetPack5.0.2(r35.1.x) から JetPack5.1.1(r35.3.x))

下記ファイルを編集する。

```bash
sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
```
上記ファイル内にある2行(common、txxx)ともに、r3x.xの部分を編集する。

Jetson NX Xavierの場合
```bash
deb https://repo.download.nvidia.com/jetson/common r35.3 main
deb https://repo.download.nvidia.com/jetson/t194 r35.3 main
```

対応表
|プラットフォーム名|Jetson名|
|:-:|:-:|
|t186|Jetson TX2|
|t194|Jetsn AGX Xavier / Jetson Xavier NX |
|t210|Jetson Nano / Jetson TX1 |


下記コマンドでアップグレード実行する。

```bash
sudo apt update
sudo apt dist-upgrade
```
下記が出てきたら、デフォルト設定で良いので、Enterを押して続行する。
![Screenshot from 2023-07-23 22-08-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/6eda01b6-c805-e0c0-3cb8-d1b8fee271ff.png)


下記のエラーが発生した場合
![Screenshot from 2023-07-23 22-10-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/4f93e200-e649-a408-15d4-d5a8db9c7072.png)

下記コマンドを実行して、エラーを解消する。    
```bash
sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/backup/
sudo mkdir /var/lib/dpkg/info/
sudo apt update
sudo apt -f install
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/backup/
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/backup/ /var/lib/dpkg/info/
sudo apt install nvidia-l4t-bootloader
```
再度、アップグレードコマンドを実行してエラーが出なければOK
```
sudo apt update
sudo apt dist-upgrade
```
詳細は、以下を参照。
   
https://qiita.com/tom_tom_tom/items/847eda3dce10cb7c89b7


最後に下記のコマンドを実行する。
```
sudo apt install --fix-broken -o Dpkg::Options::="--force-overwrite"
```
エラーがでなければ、再起動して完了。

:::note warn
**警告**
エラーが残っている状態で再起動しない。起動不能になる可能性あり。
:::
    
* その他エラーが出た場合は、下記の公式サイトを参照。
  * https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html#upgrade-jetpack 

##### JetPack4系 (例：32.3.x から 32.4.x)

下記ファイルを編集する。

```bash
sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
```

下記のようになっていて、{platform}には、下記が記述されている。

* t186 : Jetson TX2 series
* t194 : Jetson AGX Xavier series or Jetson Xavier NX
* t210 : Jetson Nano or Jetson TX1

```
deb https://repo.download.nvidia.com/jetson/common r32 main
deb https://repo.download.nvidia.com/jetson/{platform} r32 main
```

上記のr32をアップグレードしたいバージョンに書き換える。

例（32.xから32.4にする場合)

```
deb https://repo.download.nvidia.com/jetson/common r32.4 main
deb https://repo.download.nvidia.com/jetson/{platform} r32.4 main
```

下記コマンドでアップグレード実行する。

```bash
sudo apt update
sudo apt dist-upgrade
```
下記が出てきたら、デフォルト(=N)のままでよいので、Enterキーを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/d4ef1ef7-7163-1252-c6a5-14e7deca23ad.png)

同様に、デフォルト(=N)のままでよいので、Enterキーを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/9625eff9-27d0-48a2-8032-3721674e844e.png)

同様に、デフォルト(=N)のままでよいので、Enterキーを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/51ffbc41-2cd1-76ab-b06a-f45a3d09384d.png)


完了後に再起動し、再起動後にバージョン確認してアップグレードされていれば成功。

```bash
cat /etc/nv_tegra_release
```

結果例 (32.4.4)

```
# R32 (release), REVISION: 4.4, GCID: 23942405, BOARD: t210ref, EABI: aarch64, DATE: Fri Oct 16 19:44:43 UTC 2020
```

### JetPack

L4T(Jetson Linux)をアップグレード(再起動)後に、下記コマンドを実行してJetPackをアップグレードする。

```bash
sudo apt update
sudo apt install nvidia-jetpack
```

# まとめ

JetPackとL4Tをアップグレードできることを確認した。

# 参考

* 公式ドキュメント
    * JetPackのアップグレード方法
        * https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html#upgrade-jetpack
    * L4Tのアップグレード方法
        * https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fquick_start.html%23wwpID0EXHA
    * JetPack Archive
        * https://developer.nvidia.com/embedded/jetpack-archive