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

重新熱插拔設備。

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