2024年12月9日月曜日

Nvidia Jetson AGX OrinのUSB typeCポートは閉じたネットワークでのsshログインやシリアルログインに使える


背景

組込み用計算機Nvidia Jetson AGX Orinにはデバッグ用のUSBポートがあります。
Twitter(現在X)で下記の呟きを見かけたので試したところ、sshログインやシリアル通信でのログインができました。

備忘録として試した内容や関連情報を記事に残します。

使ったもの

  • Jetson AGX Orin
    Jetpack6.0.1をインストールしたものを使いました。
  • USBを繋ぐ元のPC
    ubuntu22.04をインストールしたノートPCで動作確認しました。
  • USBケーブル A to C
  • USBケーブル A to microB
    type Cのケーブルがあるならそれで十分です。
    microBでは閉じたネットワークはできません。

USB A to Cケーブルを繋ぐと、閉じたネットワーク、デバッグ用のシリアル、関連情報を含むメディアが作られる

場所: GPIO端子の横


GPIO端子の横のtypeCポートがそれです。

lsusb情報

lsusbで見れる接続情報はこちらです。
Bus 002 Device 009: ID 0955:7020 NVIDIA Corp. L4T (Linux for Tegra) running on Tegra
ProductIDはtypeCとmicroBで異なっており、typeCは7020、microBは7045でした。

メディア


メディア L4T-READMEがマウントされ、読み取り専用のバージョン情報が書かれたファイルを見れます。
更新日時が74年後の2098年のファイルがあるのは謎です。

閉じたネットワーク

USBネットワーク装置としても認識され、linuxのip aコマンドで見るとネットワークが増えているのを確認できます。
17: enx5204524cc0c0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 52:04:52:4c:c0:c0 brd ff:ff:ff:ff:ff:ff
inet6 fe80::45dd:3697:182c:379/64 scope link noprefixroute
valid_lft forever preferred_lft forever
18: enx5204524cc0c2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:04:52:4c:c0:c2 brd ff:ff:ff:ff:ff:ff
inet 192.168.55.100/24 brd 192.168.55.255 scope global dynamic noprefixroute enx5204524cc0c2
valid_lft 12sec preferred_lft 12sec
inet6 fe80::a133:ef31:564d:f9bf/64 scope link noprefixroute
valid_lft forever preferred_lft forever

閉じたネットワークとして192.168.55.*が作られています。
Jetsonはそれの1番 192.168.55.1として存在しています。
繋ぐ元のPCがubuntuなら下記のコマンドで存在を確認できます。
sudo nmap -sP 192.168.55.*

ということで、Jetsonのユーザー設定が済んでいるならsshでログインできます。
ssh [jetsonのユーザー名]@192.168.55.1

ネットワークなので、RDPを設定すればリモートデスクトップ接続もできます。
Nvidia Jetson AGX OrinにRDPでリモートデスクトップ接続

ログイン可能なシリアルポート

USBシリアルポートが1つ作られます。
PCに他の装置をつなげていなければ、ubuntuの場合は/dev/ttyACM0です。
udevadm info -q all -n /dev/ttyACM0 | grep -E "(ID_MODEL|ID_VENDOR)"
E: ID_VENDOR_ID=0955
E: ID_MODEL_ID=7020
E: ID_VENDOR_FROM_DATABASE=NVIDIA Corp.
E: ID_MODEL_FROM_DATABASE=L4T (Linux for Tegra) running on Tegra
E: ID_VENDOR=NVIDIA
E: ID_VENDOR_ENC=NVIDIA
E: ID_MODEL=Linux_for_Tegra
E: ID_MODEL_ENC=Linux\x20for\x20Tegra

開発ガイドにも説明があります。
Board Automation - NVIDIA Jetson Linux Developer Guide 1 documentation

screenコマンドなどを利用してポートを開き、ユーザー名とパスワードを入力するとログインできます。
シリアル接続でログインするときの操作はraspberry piと同じなので、screenコマンドの扱い方は下記の記事が参考になると思います。
Raspberry Pi UART接続(ログイン)時の操作メモ

USB A to microBケーブルを繋ぐと、デバッグ用のシリアルと用途不明のシリアルポートが作られる

場所: Display Portの横


Display Portの横のmicroBポートがそれです。

lsusb情報

lsusbで見れる接続情報はこちらです。
Bus 002 Device 013: ID 0955:7045 NVIDIA Corp. Tegra On-Platform Operator
typeCの説明の繰り返しになりますが、ProductIDはtypeCとmicroBで異なっており、typeCは7020、microBは7045でした。

ログイン可能なシリアルポート2つ、用途不明2つ

microB接続時はシリアルポートが4つ作られます。
ubuntuの場合は/dev/ttyACM0 ~ ttyACM3です。
udevadmの製品情報はtypeCのときとは異なるものの、4つ全て同じでした。
udevadm info -n /dev/ttyACM0 | grep -E "(ID_MODEL|ID_VENDOR)"
E: ID_VENDOR_ID=0955
E: ID_MODEL_ID=7045
E: ID_VENDOR_FROM_DATABASE=NVIDIA Corp.
E: ID_MODEL_FROM_DATABASE=8 Series USB xHCI HC
E: ID_VENDOR=NVIDIA
E: ID_VENDOR_ENC=NVIDIA
E: ID_MODEL=Tegra_On-Platform_Operator
E: ID_MODEL_ENC=Tegra\x20On-Platform\x20Operator

シリアル接続でログインするときの操作はraspberry piと同じなので、screenコマンドの扱い方は下記の記事が参考になると思います。
Raspberry Pi UART接続(ログイン)時の操作メモ

ネットワークに関する説明が見当たらない

背景で紹介した呟きで情報を知り、typeCポートを繋ぐとネットワーク機器として認識されて追加のプログラムなど無しですぐにsshログインできたものの、関連情報が見当たらなかったので実機で試すまで半信半疑でした。

説明資料を求めているフォーラムでも、USBで作られるネットワークに関する詳細情報は提示されてなかったです。
JP6 has no IP over USB 192.168.55.1 anymore

どなたか詳しい説明ページをご存知でしたら、教えていただけるとうれしいです。

おわり

Jetson AGX OrinのtypeCポートにUSBケーブルを繋ぐと閉じたネットワークやシリアルポートが作られ、Jetsonにログインできました。
困った時にモニタ無しで内部状況を確認できて便利です。

参考

USBケーブルを繋ぐとネットワークが作られると知った呟き
Board Automation - NVIDIA Jetson Linux Developer Guide 1 documentation
JP6 has no IP over USB 192.168.55.1 anymore
Raspberry Pi UART接続(ログイン)時の操作メモ

変更履歴

2024.12.11 nmapでIPの一覧を表示するコマンドを追加しました

0 件のコメント :