私のUSBデバイス(ttyUSB *)を接続されたUSBポートにマッピングするためのudevルールを作成しています。一般的なアプローチは、次の出力を見ることです。
udevadm info --name=/dev/ttyUSB0 --attribute-walk
ATTRS
これは私の結果です(言葉のない行は削除しました)。
looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6:1.0/ttyUSB0/tty/ttyUSB0':
KERNEL=="ttyUSB0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6:1.0/ttyUSB0':
KERNELS=="ttyUSB0"
SUBSYSTEMS=="usb-serial"
DRIVERS=="ftdi_sio"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6/1-1.5.6:1.0':
KERNELS=="1-1.5.6:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="ftdi_sio"
ATTRS{interface}=="USB-RS485 Cable"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5.6':
KERNELS=="1-1.5.6"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{idProduct}=="6001"
ATTRS{idVendor}=="0403"
ATTRS{manufacturer}=="FTDI"
ATTRS{product}=="USB-RS485 Cable"
ATTRS{serial}=="FTY48GF2"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5':
KERNELS=="1-1.5"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{product}=="USB 2.0 Hub [MTT]"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{manufacturer}=="Linux 4.9.41-v7+ dwc_otg_hcd"
ATTRS{product}=="DWC OTG Controller"
looking at parent device '/devices/platform/soc/3f980000.usb':
KERNELS=="3f980000.usb"
SUBSYSTEMS=="platform"
DRIVERS=="dwc_otg"
looking at parent device '/devices/platform/soc':
KERNELS=="soc"
SUBSYSTEMS=="platform"
DRIVERS==""
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
接続方法はRaspberry Pi -> USB HUB -> FTDIドングルです。私のルールは次のとおりです。
$ cat /etc/udev/rules.d/99-usb.rules
KERNEL=="1-1.5.6", SUBSYSTEM=="usb", SYMLINK+="rs485"
しかし:
# ls -l /dev/rs485
lrwxrwxrwx 1 root root 15 Oct 4 07:04 /dev/rs485 -> bus/usb/001/009
私は/ dev / ttyUSB0へのシンボリックリンクを作成する必要があると思いました。今私のドングルが次のUSB位置にあることがわかりました。
$ lsusb
Bus 001 Device 006: ID 046d:c062 Logitech, Inc. M-UAS144 [LS1 Laser Mouse]
Bus 001 Device 009: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
...
しかし、もちろんシリアルポートではありません(つまり、使用できませんecho
)。 KERNELキーとして使用しようとすると機能1-1.5.6:1.0
しません。シンボリックリンクは生成されません。
どの値を使用する必要がありますか?
答え1
man udev
を見ると、KERNELS
デバイスパスが検索され、デバイスKERNEL
自体と一致し、SUBSYSTEM
イベントを生成したカーネルの部分が表示されます。 USBドングルが接続されると、一部Udev イベントは、カーネルの一部がデバイスを発見し、それに応じて反応するときに生成されます。
SUBSYSTEM=="tty"
リンクが必要なため、デバイス自体の操作に対してルールを実行したいのです/dev/ttyUSB0
が、場合によっては、SUBSYSTEMS=="usb"
USBデバイス用のドライバが起動されるのではなく、USBデバイス自体が検出されたときにルールが実行されます。これがUSBサブシステムに見られるように、USBデバイスへのリンクを取得する理由ですbus/usb/001/009o
。
だからあなたに必要なこと
KERNELS=="1-1.5.6", SUBSYSTEM=="tty", SYMLINK+="rs485"
(S
合計参照tty
)。