ubuntu16.04机器人调试永久绑定usb串口(包括两个相同设备号的设备)

0序言

使用两个ks103超声波雷达出现的麻烦,同一种串口芯片具有相同的设备号,即idVendor和idProduct都是一样的,无法单独使用这两个号码区分设备。需要使用另外的判别项

1建立udev规则

sudo gedit /etc/udev/rule.d/usb_xxx.rules

2查询设备属性

使用一下命令查询设备ID:

lsusb
Bus 002 Device 006: ID 0424:5744 Standard Microsystems Corp. 
Bus 002 Device 003: ID 0bda:0411 Realtek Semiconductor Corp. 
Bus 002 Device 005: ID 045e:097c Microsoft Corp. 
Bus 002 Device 004: ID 045e:097d Microsoft Corp. 
Bus 002 Device 002: ID 045e:097a Microsoft Corp. 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 011: ID 046d:c21f Logitech, Inc. F710 Wireless Gamepad [XInput Mode]
Bus 001 Device 008: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 006: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
######Bus 001 Device 014: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 012: ID 1a86:5523 QinHeng Electronics CH341 in serial mode, usb to serial port converter
######Bus 001 Device 009: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 013: ID 1a81:2803 Holtek Semiconductor, Inc. 
Bus 001 Device 010: ID 1a81:2002 Holtek Semiconductor, Inc. 
Bus 001 Device 007: ID 0424:2744 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0bda:5411 Realtek Semiconductor Corp. 
Bus 001 Device 005: ID 045e:097e Microsoft Corp. 
Bus 001 Device 003: ID 045e:097b Microsoft Corp. 
Bus 001 Device 002: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

如果没有相同ID的设备可直接在刚才打开的文件中写入:

KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5523", MODE:="0777", SYMLINK+="t214driver"

但是如果出现相同id设备,如上面#号开头的两个设备,id号完全一样,就需要特殊规则,首先可以通过热插拔配合ls /dev命令确定每个设备是ttyUSB?,以ttyUSB0为例:

udevadm info --attribute-walk --name=/dev/ttyUSB0

获得详细信息:

looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.0/ttyUSB0/tty/ttyUSB0':
    KERNEL=="ttyUSB0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.0/ttyUSB0':
    KERNELS=="ttyUSB0"
    SUBSYSTEMS=="usb-serial"
    DRIVERS=="pl2303"
    ATTRS{port_number}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2/1-5.2:1.0':
    KERNELS=="1-5.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="pl2303"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="ff"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{bInterfaceSubClass}=="00"
    ATTRS{bNumEndpoints}=="03"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.2':
    KERNELS=="1-5.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="100mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0300"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="9"
    ATTRS{devpath}=="5.2"
    ATTRS{idProduct}=="2303"
    ATTRS{idVendor}=="067b"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Prolific Technology Inc."
    ATTRS{maxchild}=="0"
    ATTRS{product}=="USB-Serial Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="12"
    ATTRS{urbnum}=="457"
    ATTRS{version}==" 1.10"

会出现很多parent device小节,找到和lsusb命令中相同ID的段,例如设备ATTRS{idProduct}“2303”
ATTRS{idVendor}
"067b"这一段,这里段里还有个ATTRS{devpath}=="5.2"可以作为相同设备的区别的属性,写入到规则中就可以了:

KERNEL=="ttyUSB*", ATTRS{devpath}=="5.2", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777",SYMLINK+="t214driver"

保存规则文件,然后使用命令:

service udev reload
service udev restart

重新热插拔设备。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章