Jetson Xavier NXをセットアップしてみた

もうすぐ2025年も終わります。

今年はコミュニティ活動も積極的に取り組んだり、仕事でも出張の頻度が多く各地を飛び回ってました。

そんな中、大阪に出張に行ったときに久々に日本橋の電気街を散策していました。

シリコンハウスのガジェット自販機も健在でした!

シリコンハウスには用件済ませて閉店間際に駆け込んだのですが、そこでちょっとおもしろそうなものを買ってきました。

それは、簡易梱包されたJetson Xavier NXが搭載されたミニPCです

写真を撮り忘れましたが、レジの前にこの袋が山積みになっている横にJetson Nanoが搭載されたカメラも置いてあり、どっちを買うか迷いましたがすでにJetson Nanoはすでに持っていたのと、モジュールだけでもいい値段するXavierを手に届く価格で試してみたくて、衝動買いしてしまいましたw

オンラインでも販売されていたようで、以下のURLにある商品です。今は現行のJetsonが高騰しているなかで、3万切るのは安いですよね。(新品ではないけど)

eleshop.jp

とりあえず起動してみたらすでに中にOSがインストールされていそうでした。

ここで終わっても良かったのですが、Jetson Xavier NXに内蔵されたたった16GBのeMMCでしかブートしてなかったようで追加で何かセットアップするには心許なかったです。

で、インストール済のJetPackUbuntu 18.04に対応していますが、調べてみたら20.04に対応したバージョンまで上げることができそうです。

というわけで今回はこのミニPCでUbuntu 20.04が使えるように一からセットアップしていきます。

今回セットアップするPCのスペック

簡単にPCのスペックをまとめると以下の表になります。

項目 スペック
型番 NX211B-OL
インターフェース EthernetHDMI、SDカードスロット、USB 3.0×2、micro USB(OTG用)
ストレージ eMMC 16GB
電源 DC12V(ACアダプタは付属)

用意するもの

  • NX211B-OL
  • 外付けディスク(SSDUSBメモリなど)
  • OTGに対応したマイクロUSB
  • OSを書き込むためのホストPC(UbuntuCentOSまたはWindows。今回はUbuntuを用意しました)

セットアップ

sdk managerをインストール

JetsonのeMMCにOSを書き込むためにホストPCにsdk managerをインストールします。

インストーラーは以下のURLからお使いのPCのOSに合わせてダウンロードします。インストールにはNvidia Developerのアカウントに登録する必要があります。

developer.nvidia.com

僕の場合は、Ubuntuでセットアップしていたので以下のコマンドでインストーラーを使用してインストールします。

sudo apt install ./sdkmanager_2.4.0-13234_amd64.deb

ホストPCをJetsonにつなげる

続いてホストPCとJetsonを接続してOSを書き込むための準備をします。

OTGケーブルでPC同士を接続したら RECOVERY と書かれた穴にあるボタンを押しながらJetsonの電源を入れるとリカバリモードでPCが起動します。

ボタンは深いところにあるので、細めのプラスドライバーで押し込んでいます。

lsusb コマンドを叩いて、 NVIDIA Corp. APX が一覧に表示されていればJetsonはリカバリモードで接続できています。

koki@koki-desktop:~$ lsusb 
Bus 001 Device 002: ID 8087:8000 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 004: ID 0955:7e19 NVIDIA Corp. APX
Bus 002 Device 003: ID 04d9:a088 Holtek Semiconductor, Inc. APX
Bus 002 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

OSのインストール

接続できたら、SDK Managerを起動します。

初回起動時にSDK Managerをインストールしたときに登録したNvidia Developerのアカウントでログインします。

ログイン後、Jetsonと接続できていれば、以下の通りデバイスの一覧が表示されます。今回はサードパーティーのキャリアボードと接続して使うので、 Jetson Xavier NX を選択し OK ボタンをクリックします。

まずは、セットアップする内容を設定しておきます。

JetPackはXavierで使える最後のバージョンである5.1.5を設定し、DeepStreamのインストールは任意です。

インストールの内容を確認して一番下のライセンス同意のチェックボックスにチェックを入れたら CONTINUE をクリックします。

ダウンロードしたSDKの保存先が自動作成されるので、確認したら Create をクリックします。

管理者権限の処理があるので、ホストPCのユーザーのパスワードを入力して OK をクリックします。

インストールが実行されるのでしばらく待ちます。

インストール中にJetsonのモジュールに書き込む情報が聞かれるので設定していきます。

SSH接続で必要なIPアドレスは特になにもいじらずにユーザー名とパスワードは任意のものをいれておきます。

Storage Deviceには eMMC を設定しておきます。

Jetsonのストレージの拡張

しばらくすると、Jetson側のファンが動いてOSが立ち上がります。

そして、以下のダイアログが表示されたらJetsonにログインできる状態になったので、ダイアログにあるログイン情報でSSH接続ができます。

OSの立ち上がりには時間がかかるので、ログインできないときにはしばらく待ちます。

SSH以外にも画面を接続すればデスクトップでも操作できる状態になるのでデスクトップで操作したいときにはモニター、キーボード、マウスを用意して操作します。

ここでもう一度おさらいするとこの時点ではeMMCにOSが書き込まれている状態で、Jetson用のSDKパッケージであるJetPackをインストールするにはストレージが不足します。

その証拠にすでにeMMCの使用率はほぼ100%に達しています。

nvidia@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1   14G   13G     0 100% /
none            3.3G     0  3.3G   0% /dev
tmpfs           3.4G     0  3.4G   0% /dev/shm
tmpfs           684M   53M  631M   8% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.4G     0  3.4G   0% /sys/fs/cgroup
tmpfs           684M  4.0K  684M   1% /run/user/1000
nvidia@ubuntu:~$ 

そこでこのタイミングで外付けのディスクを使ってUSBブートをできるようにするための設定を行います。

その手順については以前Jetson互換のreComputerをセットアップするときに一度試したことあり、この手順を参考にセットアップをしていきます。ここではざっと手順をまとめますが、詳細な手順は以下のブログの通りにやれば問題なかったです。

supernove.hatenadiary.jp

まずは必要なスクリプトのレポジトリをクローンします。

git clone https://github.com/limengdu/rootOnUSB.git

続けて以下のコマンドでスクリプトを実行してOSをext4形式にフォーマットした外付けディスクにクローンします。

コピー先のディスクのパスはディスクアプリかlsblkなどで確認しておきます。

./copyRootToUSB.sh -p /dev/sda1

/boot/extlinux/extlinux.conf を開き、rootのパスをコピー先のディスクのパスに書き換えます。

-      APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 video=efifb:off nospectre_bhb nv-auto-config 
+      APPEND ${cbootargs} root=/dev/sda1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 video=efifb:off nospectre_bhb nv-auto-config 

書き換えたらJetsonを再起動して、再度dfコマンドでストレージの空き容量を確認したときに外付けディスクで追加した容量が認識されていたらストレージの拡張は成功です。

nvidia@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda        234G  9.9G  212G   5% /
none            3.3G     0  3.3G   0% /dev
tmpfs           3.4G   36K  3.4G   1% /dev/shm
tmpfs           684M   27M  657M   4% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.4G     0  3.4G   0% /sys/fs/cgroup
tmpfs           684M   20K  684M   1% /run/user/124
tmpfs           684M   28K  684M   1% /run/user/1000

再びホストPCのSDK Managerに戻り、残りのインストールを再開させたらインストールは成功です。

まとめ

今回大阪出張のときに買ったJetson Xavier NX搭載のミニPCをクリーンインストールしてみました。

同じようにシリコンハウスでこのミニPCを買った人たちのブログも見かけますが、なかなかうまくセットアップされなかったりしたのでメモがてら自分がうまくいった手順をまとめました。

なかなか忙しくてあまりさわれてなかったので、年末年始の積みガジェットの消化が一つできて良かったです。

これでUbuntu 20.04が使えるようになったのでLLMとかのセットアップをして色々遊べたらと思います!