Udev
調製解調器的 Udev 規則文件不起作用
我正在使用調製解調器發送簡訊,它有 16 個(
ttyUSB0
到ttyUSB15
)埠。我想制定udev
規則給設備名稱AMPM
和埠應該命名為Port1
,Port2
,…Port16
。在 port 上查看
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"
等等——我明白了。兩件事情:
- 你用的
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
您應該在那裡看到您的供應商/產品程式碼,以及您的所有埠。