Home New Help Edit

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

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ルール

Home New Help Edit
2023-03-24 09:22:19 32400