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).

관련 정보