Linuxシリアルポートのパスを固定する
Suns & Moon Laboratory
やりかた
2022-06-21
Alma Linux 8.6
udevのrulesファイルを書いて、パスを固定する。
調査方法
デバイスの情報を確認する
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
上記コマンド出力の一部抜粋、これをルールに記述する。
ATTRS{idProduct}=="6001"
ATTRS{idVendor}=="0403"
ATTRS{serial}=="XXYYZZ12"
FTDIのデバイス(FT232,FT245)なら、serialが使えるので、それを利用するのが手っ取り早い。
serialは、FTProgで設定できる。FTProgは、FTDIが公式に配布している。
下記の例だと、FT ProgでSerial Numberを"XXYYZZ12"に設定する。
90-usb-serial-devices.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="XXYYZZ12", SYMLINK+="ttyXYYZ", GROUP="dialout", MODE="0666"
ルールをインストールして、udevのルールを再読み込みするスクリプト
instusbserialrule.sh
#!/bin/bash
cp 90-usb-serial-devices.rules /etc/udev/rules.d/
udevadm control --reload-rules
うまくいけば、/dev/ttyXYZが増える。
設定がうまくいかない時は下記コマンドを使うと、エラーなんかも表示してくれる。
ただし、存在しない(判定してくれない)ATTRSを指定してもエラーは出ない。
udevadm test -a -p $(udevadm info -q path -n /dev/ttyUSB0)
ちょっと間違えた時、$はいらない。罠としてはATTRS{port_number}は利用できない。
Reading rules file: /etc/udev/rules.d/90-usb-serial-devices.rules
Invalid rule /etc/udev/rules.d/90-usb-serial-devices.rules:4: unknown key '$ATTRS{port_number}'
Reading rules file: /usr/lib/udev/rules.d/90-vconsole.rules
MOXA UPort 1450
で、困ったのがMOXA UPort 1450
https://amazon.co.jp/dp/B07RYR15KV
nmこいつがシリアル番号が無い。
ttyUSBxだとFTDIと混ざってしまうので、これに別名を付けたい。
色々試した末、udevadm testの最後の方に".ID_PORT"という使えそうなのがあったのでこちらを使ってみた
SUBSYSTEM=="tty", ATTRS{idVendor}=="110a", ATTRS{idProduct}=="1450", SYMLINK+="ttyXYZMX$env{.ID_PORT}", GROUP="dialout", MODE="0666"
うまくいくと、/dev/ttyXYZMX0,/dev/ttyXYZMX1,/dev/ttyXYZMX2,/dev/ttyXYZMX3 が増える。
参考
USB-シリアル変換器のデバイスファイル名を固定する
USBシリアルを色々な条件で固定する。
これを見てなんか".ID_PORT"使えそうだなーと思った。
linux - シリアルポートをある範囲の番号に割り当てる/制限するためのudevルール
2024-08-14 11:00:26 32400