HUBに接続されたUSBデバイスのKERNELSパス

HUBに接続されたUSBデバイスのKERNELSパス

私の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)。

関連情報