ラズパイに USB 接続した同一デバイスを判別できるようにする【その2ーポート】


その1】でデバイスのシリアルナンバーをキーとして、任意の名称を設定して判別しやすくしました。
しかし、USB ポートの増設等で配線が複雑になると、デバイスの入れ替わりやルール記述量の多さで作業が阻害されるかもしれません。
そこで今回は、どのポートに何のデバイスが接続されているのかわかるようにして、接続間違いを防ぎやすくします。
具体的にはラズベリーパイの USB ポート番号をキーにしてルールを作成します。

作業環境
・Raspberry Pi 3B
・Raspberry Pi OS Lite Legacy (Buster)
・USBカードリーダー
基本的なセットアップは完了しているものと想定します。
下記記事もご覧いただくとスムーズに作業できます。
https://qiita.com/kiyonaga/items/182db6b8fc9afb33751c

[手順1]追加されたデバイスファイルを確認

USB 挿抜時の dev ディレクトリの差分を確認します。今回デバイスはラズベリーパイのポート4に接続します。

接続しているラズベリーパイのポートをキーにするので、 udevadm コマンドで参照するのは sda、sdb どちらでも構いません。3つ下の sg* でも構いません。

[手順2]デバイスの固有情報を確認

udevadm info -q all -n /dev/sd*

*を a と b にそれぞれ置き換えて実行します。
今回は SUBSYSTEM , ID_BUS , ID_PATH_TAG の3つをキーとして使用するのでメモしておいてください。

[手順3]接続時ルールの作成

下記コマンドでルールファイルを作成します。

sudo nano /etc/udev/rules.d/99-usb-port.rules

下記のように記述します。

SUBSYSTEM=="block",ENV{ID_BUS}=="usb",ENV{ID_PATH_TAG}=="platform-3f98000_usb-usb-0_1_4*",SYMLINK+="USB-cardreader",MODE="0666"

usb-0_1_ に続く、" 4 " がラズベリーパイのポート番号です。
ポート番号以降は" * "(ワイルドカード)で一致するようにします。

[手順4]ルールが適用されているか確認

下記コマンドで udev にルールファイルを再読み込みさせます。

sudo udevadm trigger
または
sudo /etc/init.d/udev reload

dev ディレクトリを確認します。
ラズベリーパイのポート4に接続したデバイスに名称を付加することができました。

[まとめ]

今回は特定のポートに接続されるデバイス名を固定して、デバイスを判別しやすくしました。
ポートに接続されたデバイス名と実際に接続したデバイスを確認することで入れ替わりを防げます。
同一のデバイスであれば、併せてシリアルナンバーもキーにすると良いかもしれません。