WSL2からJetPack5.0.1DPをセットアップ

# 1. はじめに
- 普通であればSDKmanagerをUbuntu18.04機に展開して実行するのですが、魔が差したのか環境が無かったのでWSL2からやってみたらどうなると試してみました。

-先に結論を述べると **普通の手順**(Ubuntu18.04+SDK Manager)が気持ちよくインストールできます。　

## 1-2.下ごしらえ
* まずはWSL2の環境ができていることが前提です。
    * 下記の公式サイトや優れたエンジニアの説明を見て準備します。
    * また、各自このみのGUIを出せる環境を作っておきます。


https://docs.microsoft.com/ja-jp/windows/wsl/compare-versions

https://docs.nvidia.com/cuda/wsl-user-guide/index.html


- GUI化（マイクロソフト）

https://docs.microsoft.com/ja-jp/windows/wsl/tutorials/gui-apps

- 当方が使用したGUIツールは以下です(実行画面例)

https://sourceforge.net/projects/vcxsrv/

![実行例.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/9e33f252-7b05-97cb-2952-3b6f81f0ef33.png)


# 2. SDK managerのダウンロード

* WSL2上のUbuntu18.04は通常USBデバイスが認識されません。
    * この為、WSL2上でブラウザを開いて、そちらからダウンロードの方が早いと思います。
    * wgetできないかなと思いましたが、旧いものしかみつかりませんでした・・・

https://developer.nvidia.com/nvidia-sdk-manager

## 2-2. usbipd-winのインストール

* WSL2で使用する為にusbipd-winをインストールします。
    * ダウンロードサイトは以下で、基本的にオプションはないので問題ないかと。
    * インストールはWIndows上になります。
    * 実行環境はPowershellターミナルが基本になります。


https://github.com/dorssel/usbipd-win/releases/tag/v2.3.0


```Powershell:実行コマンド

usbipd wsl --help
usbipd wsl list
usbipd wsl attach --busid=<BUSID>

```

```Powershell:usbipd実行例
usbipd wsl list

#表示例
BUSID  VID:PID    DEVICE                                                        STATE
1-1    0955:7019  APX                                                           Not attached
1-8    138a:00ab  Synaptics VFS7552 Touch Fingerprint Sensor with PurePrint...  Not attached
1-14   8087:0aaa  英特尔(R) 无线 Bluetooth(R)                                   Not attached


usbipd wsl attach --busid=<BUSID>

#1-1がお目当てのAGX Xavierになります。

usbipd wsl attach --busid 1-1

usbipd: infor: Using default distribution 'Ubuntu-18.04'

```

## 2-3.  SDK managerを起動する

* WSL2のターミナルとは別にGUI用のウィンドウを開いておきます。
    * ターミナルでコマンド実行・起動します。

```WSL2:起動コマンド

sdkmanager

```
画像だけなら公式がシンプルに分かりやすいので・・・

https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html


# 3. そう簡単にはいかない模様(追加対応)

* 普通にインストールしているとOSイメージ作成のところでError失敗になります。
    * rootfs(どうもJetPackのイメージ元)の作成ができないと怒られます。


## 3-2.qemu-armが必要なようだ

https://qiita.com/ikwzm/items/4e96c61cd5c16f093eca

- ただし、こちらの内容を全ておこなうのではなく、一部を拝借します。

## 3-3. コマンド実行前に対応策

https://forums.developer.nvidia.com/t/l4t-apply-binaries-sh-error/111153/7

- linuxdev さんの回答の冒頭2行分まで実行します。


```WSL2:実行部分

sudo apt-get install qemu-user-static binfmt-support

sudo dpkg-reconfigure qemu-user-static


```

:::note info
インフォメーション
- JetPackのインストールのトラブルでは度々登場するlinuxdev さん
- 私もヘルプを受けると同時に「環境が？？？」だぞと突っ込まれました(汗)
:::


```WSL2:実行部分

sudo update-binfmts --enable qemu-arm

```

* 参照ページの手順を最後までしなくても。
    * qemu-arm (enabled):
     package = qemu-user-static となればよいです。
    * 最後まで実行していた際はフラッシュが途中で失敗し続けていました・・・

# 4. 書き込み(成功した手順）
<必要なもの>
* GUIまたはCLIコマンドで作成したJetPack5.0.1DPのイメージ
    * /nvidia/nvidia_sdk/JetPack_5.0.1_DP_Linux_JETSON_AGX_XAVIER_TARGETS/Linux_for_Tegra/
     フォルダのshコマンドをWSL2ターミナルで実行。
    * フラッシュ中はUSBがアンマウントされたらマウントし直す（高速で！）

* 2つのターミナルの動きを見ながら必死で対応します。


```WSL2:WSL2フラッシュコマンド

#最初に実行しておいた方がいいかも。ホストのイメージを解凍しています
sudo ./apply_binaries.sh

sudo ./nvsdkmanager_flash.sh

```
```Powershell:Powershellターミナルコマンド

usbipd wsl attach --busid 1-1
#切断されているとこのメッセージが返ってきます。
usbipd: infor: Using default distribution 'Ubuntu-18.04'

```


:::note info
インフォメーション
通常のUbuntu機からのインストールではUSB接続が切れても自動的にマウントし直します。
:::


```WSL2:書き込み完了の表示(例)

[ 403.8689 ] tegradevflash_v2 --write MEM_BCT_b mem_coldboot_sigheader.bct.encrypt
[ 403.8698 ] Bootloader version 01.00.0000
[ 403.8809 ] Writing partition MEM_BCT_b with mem_coldboot_sigheader.bct.encrypt [ 198656 bytes ]
[ 403.8827 ] [................................................] 100%
[ 403.9207 ]
[ 403.9209 ] Flashing completed

[ 403.9211 ] Coldbooting the device
[ 403.9252 ] tegrarcm_v2 --ismb2
[ 403.9469 ]
[ 403.9494 ] tegradevflash_v2 --reboot coldboot
[ 403.9502 ] Bootloader version 01.00.0000
[ 403.9650 ]
*** The target t186ref has been flashed successfully. ***
Reset the board to boot from internal eMMC.

```

:::note warn
インフォメーション
起動してくるJetsonPackはCUDA等々なにもセットアップされていないので、
SDKmanagerもしくは起動したJetsonからセットアップが必要です。
:::

# 5. まとめ

| 評価/ 環境 | 　　WSL2　　 | Ubuntu18.04  |
|:-----------|------------:|:------------:|
| SDK manager       | 可※        | 問題なし         |
| フロントType-Cポート     | 常時監視必要      | 自動接続       |
| イメージ作り       | QEMUと設定        | 特になし         |
| WIndowsからのコピペ         | OK          | N/A           |
| 体力       | 必要       | それほど不要       |


# 6. 余談
- Virtual環境ではサクッと終えている方もいるようで・・・。ただし、以前の公式Forumではlinuxdevさんや公式の方に非サポートだよ！と怒られていました。
- Windows上で疑似ではないUbuntuそのものと聞いていましたが、HWとの接続はグラフィックドライバのセットアップを含めて苦労がありますね。
- 成功とはいいがたいですが、どの様にデータが集められて、どうやって書き込んでいるのかが目に見えて実感できました。
- そう考えるとこれをshコマンドにしてパッケージ化した某エンジニア（行方不明）は本当に凄いですし、彼をディスった大先生はもっとすごいんだなぁと思いました。