Jetsonを用いてSPIピンをenableにしようと思ったのですが、その際に意図しないエラーが2つ?出たので、その解決方法について述べます。
まず前提として、
sudo mkdir /boot/dtb/
や、
sudo cp -v /boot/tegra210-p3448-0000-p3449-0000-[ab]0[012].dtb /boot/dtb/
などのこのサイトに従った設定は済ませていると仮定します。
問題1
$ sudo /opt/nvidia/jetson-io/jetson-io.py
を実行したときに、起動した瞬間、エラーも何も表示されずにスクリプトが終了する。
解決法
この問題はこのサイトを参考に解決させました。
/opt/nvidia/jetson-io/Jetson/board.py
のソースコードを下記のように編集します。
# 133行目くらい
#dtbdir = os.path.join(self.bootdir, 'dtb')
dtbdir = os.path.join(self.bootdir, '')
この変更後に、もう一度↓のコマンドを入力すると通常通りにピン設定をすることができました。
$ sudo /opt/nvidia/jetson-io/jetson-io.py
問題2
問題1を解決して再起動した後に、もう一度sudo /opt/nvidia/jetson-io/jetson-io.py
で設定が完了しているか確かめようとすると、問題1と同じ現象が起こる。
解決策
先ほど変更した/opt/nvidia/jetson-io/Jetson/board.py
のソースコードを元に戻します。。。
# 133行目くらい
dtbdir = os.path.join(self.bootdir, 'dtb')
# dtbdir = os.path.join(self.bootdir, '')
それでも起動しないので、どんなエラーが生じているかを調べるために、下記のスクリプトを動かしてみます。
以下が実行法とエラー出力です。
$ sudo /opt/nvidia/jetson-io/config-by-pin.py
> Traceback (most recent call last):
File "/opt/nvidia/jetson-io/config-by-pin.py", line 51, in <module>
main()
File "/opt/nvidia/jetson-io/config-by-pin.py", line 34, in main
jetson = board.Board()
File "/opt/nvidia/jetson-io/Jetson/board.py", line 150, in __init__
self.dtb = _board_get_dtb(self.compat, self.model, dtbdir)
File "/opt/nvidia/jetson-io/Jetson/board.py", line 91, in _board_get_dtb
raise RuntimeError("Multiple DTBs found for %s!" % model)
RuntimeError: Multiple DTBs found for NVIDIA Jetson Nano Developer Kit!
Multiple DTBsとのことで、.dtb
ファイルが多いと述べられているようです。
エラーが出ている箇所でprintをしてみると、下記のような出力がされました。
['/boot/dtb/tegra210-p3448-0000-p3449-0000-b00.dtb', '/boot/dtb/kernel_tegra210-p3448-0000-p3449-0000-b00.dtb']
この`.dtb`ファイルについて、前者が[このサイトで実行した](https://www.jetsonhacks.com/2020/05/04/spi-on-jetson-using-jetson-io/)`sudo cp -v /boot/tegra210-p3448-0000-p3449-0000-[ab]0[012].dtb /boot/dtb/`でコピーされてきた分です。それに対し、後者は なんか知らんやつ です(適当)。
ということで、システムが なんか知らんやつ を認識しないようにします。
sudo mv /boot/dtb/kernel_tegra210-p3448-0000-p3449-0000-b00.dtb /boot/dtb/kernel_tegra210-p3448-0000-p3449-0000-b00.dtb.bkp
最後に目的のコマンドを実行すると、通常通りに動作することが確認できました。
$ sudo /opt/nvidia/jetson-io/jetson-io.py
やったね ;)