nvidia jetsonTX2 のImageファイル、dtbファイルを指定したflash方法


はじめに

大変大変、何が大変かって、一番大変なのは、nvidia Jetsonの環境を壊してしまったときですよね。
なんとか環境をもとに戻したくても、ほしい情報が殆どない。
それは、各状況においてやるべきことが異なるからでしょう。
というわけで、本日はnvidia JetsonTX2の環境修復の方法をメモがてらアップしておきたいと思います。

問題

nvidia JetsonTX2で、apt upgrade後に、

  • USBキーボードが効かなくなってしまった!
  • 接続しているカメラ等のデバイスが見えなくなってしまった!

(通常apt upgradeはインストール済みのパッケージをアップデートするだけなので、このようなことは起こらないらしいですが、Jetpack4.4では不具合があり、今回このような事象が起きたようです。)

やりたいこと

nvidia JetsonTX2の環境を、自前のカーネル(Imageファイル), デバイスツリーバイナリ(.dtbファイル)を使って初期化(flash)する。

前提

準備するべきハードウェア

nvidia JetsonTX2(以後TX2と略す)
host PC: TX2と接続してflashする用
USB cable(microUSB - USB A): host PCとTX2を接続する用

前提とするソフトウェア

hostPC OS: Ubuntu18.04
Jetpack4.4 on host PC
Image: 自前の使いたいLinux kernel
*.dtb: 自前の使いたいdevice tree binary

flash方法

  • TX2とhost PCをUSBケーブルで直接接続
    これをしておかないと、Jetpackのsdkmanagerのインストール時にコケます。

  • recovery modeでTX2を起動
    TX2の電源ケーブルを接続し、
    boot前に、Recovery buttonを長押しし、押している間に
    Reset buttonをポチッと押し、
    2秒以上経ってから、Recovery buttonを離す
    (host PCにて、lsusbコマンドで、新たにNvidia~と出ていれば接続できています)

  • nvidiaのarchiveページからJetpackをhost PCにダウンロード(今回は初めにflashしたバージョンが4.4だったので、それを使います)。

  • host PCでカーネルを指定してflash

sudo ./flash.sh -r -k kernel -K <your Image> jetson-tx2 mmcblk0p1
e.g. sudo ./flash.sh -r -k kernel -K production/Image jetson-tx2 mmcblk0p1
  • host PCでdtbファイルを指定してもう一度flash
sudo ./flash.sh -r -k kernel-dtb -d <your .dtb> jetson-tx2 mmcblk0p1
e.g. sudo ./flash.sh -r -k kernel-dtb -d production/tegra186-quill-p3310-1000-a00-00.dtb jetson-tx2 mmcblk0p1
  • host PCでjepack 4.4からCUDA関連ライブラリをインストール
sdkmanager

でjetpackのsdkmanagerを開き、GUI上で操作する。
このとき、host PCに特にCUDA関連のライブラリを新たにセットアップする必要がなければ、hostPCのチェックボックスを外す。
また、sdkmanager上で必要なjetpackバージョン(今回は4.4)を選択する。

  • 必要なライブラリをaptでインストールする

参考

TX2にUSB有線接続している間に、TX2にsshで入るには

と打てばよい。、、、すみません、いつもそれでいいのかは知りません。

終わりに

できてみれば結局ポイントはflashコマンドのオプション指定だけだったのですが、-d等で指定しているにも関わらず、-kオプションで何を焼きたいか書かなければいけないあたりが、普通のオプションの指定方法に対して、冗長な気がして、わかりにくいですよね。それでハマって数日費やしてしまったので、皆さんが時間を浪費せずにすめば幸いです。
それでは皆様、素敵なjetsonライフをお過ごしください!