はじめに
今回はラズベリーパイの USBポート番号 をキーにしてルールを作成します。
【その1】でデバイスのシリアルナンバーをキーにして任意の名称を設定しました。
しかしながら、USB ポートの増設等で配線が複雑になると、デバイスの入れ替わりやルール記述量の多さで作業が阻害される可能性があります。
そこで今回は、どのポートに何のデバイスが接続されているのかわかるようにして、接続間違いを防ぎやすく します。
作業環境
・Raspberry Pi 3B
・Raspberry Pi OS Lite Legacy (Buster)
・USBカードリーダー(カードリーダー2口)
基本的なセットアップは完了しているものとします。
下記記事もご覧いただくとスムーズに作業できます。
https://qiita.com/kiyonaga/items/182db6b8fc9afb33751c
[手順1] 追加されたデバイスファイルを確認
USB 挿抜時の dev ディレクトリの差分を確認します。
今回は sda、sdb が追加されました。
[手順2] カードリーダーの固有情報を確認
udevadm info -q all -n /dev/sd*
" * " を a または b に読み替えて実行してください。
今回は SUBSYSTEM , ID_BUS , ID_PATH_TAG の3つをキーとして使用するのでメモしておいてください。
接続しているラズベリーパイのポート番号をキーにするので、 udevadm コマンドで参照するのは sda、sdb どちらでも構いません。
[手順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"
ENV に設定するデバイスの固有情報がわからない場合は 【その1】をご参照ください。
今回はカードリーダーをラズベリーパイの ポート4 に接続したので ENV{ID_PATH_TAG}=="platform-3f98000_usb-usb-0_1_4*"
としています。
usb-0_1_ に続く、" 4 " がラズベリーパイのポート番号を示しています。
また、ポート番号以降は" * "(ワイルドカード)で一致するようにします。
ラズベリーパイ上の各 USB ポート番号の位置関係は以下の通りです。
----- ----- -----
| | 2 | 4 |
| LAN |----- -----
| | 3 | 5 |
----- ----- -----
----- ----- -----
| 3 | 1 | |
----- -----| LAN |
| 4 | 2 | |
----- ----- -----
※4B の場合、ID_PATH_TAG が platform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_...
のように 3B と異なるので注意してください
[手順4] ルールが適用されているか確認
以下コマンドで udev にルールファイルを再読み込みします。
sudo udevadm trigger
または
sudo /etc/init.d/udev reload
dev ディレクトリを確認します。
USB-cardreader ファイルが作成されたのが確認できました。
[まとめ]
今回は特定のポートに接続されるデバイス名を固定して、デバイスを判別しやすくしました。
ポートに接続されたデバイス名と実際に接続したデバイスを確認することで入れ替わりを防げます。
同一のデバイスを複数接続するのであれば、併せてシリアルナンバーもキーにすると良いかと思われます。