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
重新熱插拔設備。