나는 SMS를 보내기 위해 모뎀을 사용하고 있는데, 모뎀에는 16개의 ttyUSB0
포트 가 있습니다 ttyUSB15
. udev
장치 이름을 지정하는 규칙을 만들고 AMPM
포트 이름을 Port1
,, Port2
... 로 지정해야 합니다 Port16
.
lsusb
포트 및 명령의 출력을 봅니다 .udevadm
ttyUSB0
kk@kk:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 004: ID 0461:4d22 Primax Electronics, Ltd
Bus 001 Device 015: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 016: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 003 Device 003: ID 413c:2003 Dell Computer Corp. Keyboard
Bus 001 Device 017: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 001 Device 018: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
Bus 001 Device 019: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
kk@kk:~$
kk@kk:~$ udevadm info -q all -n /dev/ttyUSB0
P: /devices/pci0000:00/0000:00:1a.7/usb1/1-3/1-3.1/1-3.1:1.0/ttyUSB0/tty/ttyUSB0
N: ttyUSB0
S: serial/by-id/usb-FTDI_Quad_RS232-HS-if00-port0
S: serial/by-path/pci-0000:00:1a.7-usb-0:3.1:1.0-port0
E: DEVLINKS=/dev/serial/by-id/usb-FTDI_Quad_RS232-HS-if00-port0 /dev/serial/by-path/pci-0000:00:1a.7-usb-0:3.1:1.0-port0
E: DEVNAME=/dev/ttyUSB0
E: DEVPATH=/devices/pci0000:00/0000:00:1a.7/usb1/1-3/1-3.1/1-3.1:1.0/ttyUSB0/tty/ttyUSB0
E: ID_BUS=usb
E: ID_MM_CANDIDATE=1
E: ID_MODEL=Quad_RS232-HS
E: ID_MODEL_ENC=Quad\x20RS232-HS
E: ID_MODEL_FROM_DATABASE=FT4232H Quad HS USB-UART/FIFO IC
E: ID_MODEL_ID=6011
E: ID_PATH=pci-0000:00:1a.7-usb-0:3.1:1.0
E: ID_PATH_TAG=pci-0000_00_1a_7-usb-0_3_1_1_0
E: ID_REVISION=0800
E: ID_SERIAL=FTDI_Quad_RS232-HS
E: ID_TYPE=generic
E: ID_USB_DRIVER=ftdi_sio
E: ID_USB_INTERFACES=:ffffff:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=FTDI
E: ID_VENDOR_ENC=FTDI
E: ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
E: ID_VENDOR_ID=0403
E: MAJOR=188
E: MINOR=0
E: SUBSYSTEM=tty
E: UDEV_LOG=3
E: USEC_INITIALIZED=7668235100
udev
나는 규칙을 따를 수 없습니다 .
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-15]*", ATTRS{idVendor}=="0403", ATTRS{product}=="6011", NAME=="AMPM" , SYMLINK=="AMPM", GROUP="tty", MODE="0660"
답변1
잠깐만요. 알겠습니다. 두가지:
ATTRS{product}=="6011"
.ATTRS{idProduct}=="6011"
그 부재는id
그것을 깨뜨릴 것입니다. 이러한 오타를 방지 하려면 복사하여 붙여넣으세요udevadm info --attribute-walk
.- 귀하의 스키마가 잘못되었습니다
KERNEL=="ttyUSB[0-9]*"
. 이는 (매우 제한된) 정규식이므로[0-15]*
"0~1 또는 5의 모든 문자, 횟수에 관계없이 반복됨"을 의미합니다.
SYMLINK+=
또한 링크를 유지하는 대신 SYMLINK==
다른 링크를 사용할 수도 있습니다 . 맞습니다. SUBSYSTEMS=="usb"
제품/공급업체와 일치해야 합니다.
AMPM 장치에 번호를 매기려면 udev
이 번호를 제공해야 합니다. 안타깝게도 이는 usb-serial
기기 자체가 아닌 기기의 일부입니다 usb
. 따라서 %s{port_number}
/ 만 사용할 수는 없습니다 $attr{port_number}
. 대신 60-persistent-serial.rules
새 버전의 트릭을 빌려 udev
다음과 같이 하십시오.
SUBSYSTEMS=="usb-serial", ENV{.LOCAL_PORT_NUM}="$attr{port_number}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", SYMLINK+="AMPM$env{.LOCAL_PORT_NUM}"
이전 버전에서는 udev
사용해야 할 수도 있습니다.%E{…}
$env{…}
또는 udev
충분히 새로운 경우 다음을 사용하십시오 /dev/serial/by-id
.
$ ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Jan 4 06:02 usb-067b_2303-if00-port0 -> ../../ttyUSB0
공급업체/제품 코드와 모든 포트가 표시되어야 합니다.
답변2
비슷한 요구 사항이 있었습니다. 스크립트가 고유하게 참조할 수 있도록 여러 FTDI USB 직렬 장치를 고유한 이름에 매핑했습니다.
Ubuntu 13.04에서는 약간의 수정 후에 다음이 나에게 효과적이었습니다.
도움이 되었기를 바랍니다:
#######################################################################################################################################
# Creating unique symbolic links to usb-serial devices based on their "serial" number and other such as "bInterfaceNumber" attributes.
# Use udevadm [e.g. udevadm info -a -p $(udevadm info -q path -n ttyUSB0)] to find the subsystems that match and their attributes.
#######################################################################################################################################
SUBSYSTEMS=="usb", ATTRS{serial}=="0000:00:1d.0", ENV{.LOCAL_serial}="$attr{serial}"
SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{.LOCAL_serial}=="0000:00:1d.0", ENV{.LOCAL_ifNum}=="00", SYMLINK+="ttyPapilioJTAG", MODE="0660"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ENV{.LOCAL_serial}=="0000:00:1d.0", ENV{.LOCAL_ifNum}=="01", SYMLINK+="ttyPapilioConsole", MODE="0660"