我有一个 dlink DW-157 3g 适配器。我试图通过修改 udev 规则文件在每次启动时将相同的端口分配给加密狗。由于加密狗在启动时作为存储介质启动,因此我必须输入以下命令来弹出并安装调制解调器模式,然后输入下面的其他命令以利用调制解调器的 ttyUSB 端口来运行拨号调制解调器。
sudo eject /dev/sr0
sudo /bin/sh -c "echo 2001 7d0e > /sys/bus/usb-serial/drivers/option1/new_id
输入这些后, sudo dmesg| grep ttyUSB 显示为:
[ 17.581264] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 17.584470] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2
[ 17.593854] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
[ 17.594869] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB4
我可以使用调制解调器进行拨号的实际端口是 ttyUSB1。因此,我尝试在我的 udev 规则文件中将 ttyUSB1 分配给 d_uart:
ACTION=="add", ATTRS{idVendor}=="2001", ATTRS{idProduct}=="7d0e", SYMLINK+="d_uart"
但发生的情况是 d_uart 被分配给 ttyUSB4。我该怎么做才能将它始终分配给第一个端口(在本例中为 ttyUSB1)?
另外,ttyUSB1、ttyUSB2、ttyUSB3 和 ttyUSB4 的命令输出如下:
udevadm info -a -n /dev/ttyUSB4 | grep '{serial}' | head -n1
是一样的。
ATTRS{序列号}=="3f980000.usb"
另外,命令 ls -l /dev/d_uart 的输出
lrwxrwxrwx 1 root root 7 Oct 3 13:27 /dev/d_uart -> ttyUSB4
lsusb 输出:
Bus 001 Device 006: ID 2001:7d0e D-Link Corp.
Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root h
udevadm info -n /dev/ttyUSB2 的输出:
P: /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.3/ttyUSB2/tty/ttyUSB2
N: ttyUSB2
S: d_uart
S: serial/by-id/usb-D-Link_Inc_D-Link_DWM-157-if03-port0
S: serial/by-path/platform-3f980000.usb-usb-0:1.4:1.3-port0
E: DEVLINKS=/dev/d_uart /dev/serial/by-id/usb-D-Link_Inc_D-Link_DWM-157-if03-port0 /dev/serial/by-path/platform-3f980000.usb-usb-0:1.4:1.3-port0
E: DEVNAME=/dev/ttyUSB2
E: DEVPATH=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.3/ttyUSB2/tty/ttyUSB2
E: ID_BUS=usb
E: ID_MODEL=D-Link_DWM-157
E: ID_MODEL_ENC=D-Link\x20DWM-157
E: ID_MODEL_ID=7d0e
E: ID_PATH=platform-3f980000.usb-usb-0:1.4:1.3
E: ID_PATH_TAG=platform-3f980000_usb-usb-0_1_4_1_3
E: ID_REVISION=0300
E: ID_SERIAL=D-Link_Inc_D-Link_DWM-157
E: ID_TYPE=generic
E: ID_USB_CLASS_FROM_DATABASE=Miscellaneous Device
E: ID_USB_DRIVER=option
E: ID_USB_INTERFACES=:020e00:0a0002:ff0201:ff0000:080650:
E: ID_USB_INTERFACE_NUM=03
E: ID_USB_PROTOCOL_FROM_DATABASE=Interface Association
E: ID_VENDOR=D-Link_Inc
E: ID_VENDOR_ENC=D-Link\x2cInc\x20\x20
E: ID_VENDOR_FROM_DATABASE=D-Link Corp.
E: ID_VENDOR_ID=2001
E: MAJOR=188
E: MINOR=2
E: SUBSYSTEM=tty
E: TAGS=:systemd:
E: USEC_INITIALIZED=978899
答案1
您可以尝试在ttyUSB1设备的创建上进行匹配。将您的规则更改为
ACTION=="add", ENV{ID_VENDOR_ID}=="2001", ENV{ID_MODEL_ID}=="7d0e", ENV{DEVNAME}=="/dev/ttyUSB1", SYMLINK+="d_uart"
确保sudo udevadm control --reload
在进行任何更改后执行此操作。如果每个端口的情况不同,您可能应该在 上进行匹配ID_USB_INTERFACE_NUM
,这样即使您有其他ttyUSB*
设备,它也能正常工作。