reComputer J4012セットアップ（Jetson Linuxインストール編）

## はじめに

先日、Jetson Orin NXモジュールを搭載したreComputer J4012（<https://www.seeedstudio.com/reComputer-J4012-p-5586.html>）を購入しました。先日、この記事執筆時点で最新のJetPack 5.1.1がリリースされたため、この記事ではreComputer J4012にJetson Linuxをインストールする方法を紹介します。

## 動作確認環境

- reComputer J4012(Jetson Orin NX 16GB)
- JetPack 5.1.1

## 1. Jetson Orin NX実機

### 1.1 Force Recovery Mode起動

<https://wiki.seeedstudio.com/reComputer_J4012_Flash_Jetpack/#enter-force-recovery-mode>を参考にして、Force Recovery Modeで起動します（Force Recovery Modeとは母艦PCからJetsonが外付けストレージとして見えるようなモードのことです）。

- reComputer J4012のFC REC、GNDのピンをジャンプワイヤ（メス−メス）で接続します
- USB Type-C、Type-Aケーブルを用意し、USB Type-CをreComputer J4012、Type-Aを母艦PCに接続します
- reComputer J4012の電源を投入します

母艦PCで`lsusb`コマンドを実行して以下のメッセージが表示されればreComputer J4012がForce Recovery Modeで起動できていることがわかります。

```
ID 0955:7323 NVIDIA Corp. APX
```

Force Recovery Modeで起動したらジャンプワイヤを外しておきます。

## 2. 母艦PC

### 2.1 パッケージインストール

Jetsonセットアップに必要なパッケージをインストールします。

```shell
sudo apt-get install qemu-user-static sshpass abootimg nfs-kernel-server libxml2-utils
```

### 2.2 Jetson Linuxインストール

<https://wiki.seeedstudio.com/reComputer_J4012_Flash_Jetpack/#flash-to-jetson>の手順を参考にしてJetson Linuxをインストールします。まずはじめに<https://developer.nvidia.com/embedded/jetson-linux>から以下のファイルをダウンロードします。

今回、Jetson Linux 35.3.1を用いたので<https://developer.nvidia.com/embedded/jetson-linux-r3531>からダウンロードしました。

- Driver Package (BSP)：`Jetson_Linux_R35.3.1_aarch64.tbz2`
- Sample Root Filesystem：`Tegra_Linux_Sample-Root-Filesystem_R35.3.1_aarch64.tbz2`

その後、以下のコマンドを実行してreComputer J4012にJetson Linuxをインストールします。

```shell
tar xf Jetson_Linux_R35.3.1_aarch64.tbz2
sudo tar xpf Tegra_Linux_Sample-Root-Filesystem_R35.3.1_aarch64.tbz2 -C Linux_for_Tegra/rootfs/
cd Linux_for_Tegra/
sudo ./apply_binaries.sh
sudo ./tools/l4t_flash_prerequisites.sh
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_external.xml -p "-c bootloader/t186ref/cfg/flash_t234_qspi.xml" \
  --showlogs --network usb0 p3509-a02+p3767-0000 internal
```

## 3. Jetson Orin NX実機

### 3.1 初期設定

初回起動時にアカウント作成、言語設定、キーボード設定、ネットワーク設定などを行います。最後にChromiumインストールを行うか聞かれるためインストールする場合はネットワーク設定をしておくとよいでしょう。

### 3.2 jetson_statsインストール

後述するjetson_releaseを実行するために<https://github.com/rbonghi/jetson_stats>を参考にしてjetson_statsパッケージをインストールします。

```shell
sudo apt install python3-pip
sudo pip3 install -U jetson-stats
```

### 3.3 nvidia-jetpackインストール

<https://lab.seeed.co.jp/entry/2022/06/06/120000>を参考にして`nvidia-jetpack`をインストールします。インストール前の状態を確認するために`jetson_release`コマンドを実行します。この結果から、この時点だとCUDA、cuDNN、TensorRTなどがインストールされていないことがわかります。

```shell
$ jetson_release
Software part of jetson-stats 4.2.1 - (c) 2023, Raffaello Bonghi
Model: NVIDIA Orin NX Developer Kit - Jetpack 5.1.1 [L4T 35.3.1]
NV Power Mode[2]: 15W
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
 - P-Number: p3767-0000
 - Module: NVIDIA Jetson Orin NX (16GB ram)
Platform:
 - Distribution: Ubuntu 20.04 focal
 - Release: 5.10.104-tegra
jtop:
 - Version: 4.2.1
 - Service: Active
Libraries:
 - CUDA: Not installed
 - cuDNN: Not installed
 - TensorRT: Not installed
 - VPI: Not installed
 - Vulkan: 1.3.204
 - OpenCV: 4.2.0 - with CUDA: NO
```

以下のコマンドを実行して`nvidia-jetpack`をインストールします。

```shell
sudo apt install nvidia-jetpack
```

インストール後の状態を確認するために`jetson_release`コマンドを実行します。この結果からCUDA、cuDNN、TensorRTなどがインストールされていることがわかります。

```shell
$ jetson_release
Software part of jetson-stats 4.2.1 - (c) 2023, Raffaello Bonghi
Model: NVIDIA Orin NX Developer Kit - Jetpack 5.1.1 [L4T 35.3.1]
NV Power Mode[2]: 15W
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
 - P-Number: p3767-0000
 - Module: NVIDIA Jetson Orin NX (16GB ram)
Platform:
 - Distribution: Ubuntu 20.04 focal
 - Release: 5.10.104-tegra
jtop:
 - Version: 4.2.1
 - Service: Active
Libraries:
 - CUDA: 11.4.315
 - cuDNN: 8.6.0.166
 - TensorRT: 5.1.1
 - VPI: 2.2.6
 - Vulkan: 1.3.204
 - OpenCV: 4.5.4 - with CUDA: NO
```

### 3.4 ユーザー設定

#### 3.4.1 Docker

以下のコマンドを実行して、dockerグループに追加します。コマンド実行後に再ログインすると反映されます。

```shell
sudo gpasswd -a $USER docker
```

#### 3.4.2 CUDAパス

`$HOME/.bashrc`に以下の記述を追記してターミナルを開き直します。

```shell
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
```

反映後、`nvcc`コマンドが実行できたらCUDAパスが設定できています。

```shell
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Sun_Oct_23_22:16:07_PDT_2022
Cuda compilation tools, release 11.4, V11.4.315
Build cuda_11.4.r11.4/compiler.31964100_0
```

## Appendix

### `nvidia-jetpack`をインストールすることでインストールされるパッケージ

`nvidia-jetpack`をインストールすることでインストールされるパッケージを以下に示します。

```shell
$ apt depends nvidia-jetpack-runtime 
nvidia-jetpack-runtime
  Depends: nvidia-l4t-jetson-multimedia-api (>> 35.3-0)
  Depends: nvidia-l4t-jetson-multimedia-api (<< 35.4-0)
  Depends: nvidia-cuda (= 5.1.1-b52)
  Depends: nvidia-tensorrt (= 5.1.1-b52)
  Depends: nvidia-cudnn8 (= 5.1.1-b52)
  Depends: nvidia-cupva (= 5.1.1-b52)
  Depends: nvidia-opencv (= 5.1.1-b52)
  Depends: nvidia-container (= 5.1.1-b52)
  Depends: nvidia-vpi (= 5.1.1-b52)
```

```shell
$ apt depends nvidia-jetpack-dev
nvidia-jetpack-dev
  Depends: nvidia-l4t-jetson-multimedia-api (>> 35.3-0)
  Depends: nvidia-l4t-jetson-multimedia-api (<< 35.4-0)
  Depends: nvidia-jetpack-runtime (= 5.1.1-b52)
  Depends: nvidia-nsight-sys (= 5.1.1-b52)
  Depends: nvidia-tensorrt-dev (= 5.1.1-b52)
  Depends: nvidia-cuda-dev (= 5.1.1-b52)
  Depends: nvidia-vpi-dev (= 5.1.1-b52)
  Depends: nvidia-opencv-dev (= 5.1.1-b52)
  Depends: nvidia-cudnn8-dev (= 5.1.1-b52)
```

### NVIDIA SDK Manager

reComputer J4012のセットアップに[NVIDIA SDK Manager](https://developer.nvidia.com/drive/sdk-manager)を使うことを試みてみましたが、「Could not detect a board」という表示が出ており、reComputer J4012を認識することができませんでした。少なくとも執筆時点で最新のNVIDIA SDK Manager v1.9.2（GUI版）ではreComputer J4012をセットアップすることができないようです。

![Screenshot from 2023-04-02 22-52-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31158/d03c1cad-1c95-4081-5eec-d672211fec16.png)