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