赞
踩
在linux系统中,usb设备通常以ttyUSB*的方式在系统中挂载,如果同时连接多个usb设备,各个设备难以区分,而且存在读取权限的问题,在每次使用时都要对其进行权限修改,使用起来相当麻烦,因此,需要对usb设备进行命名,根据usb设备的产品号和设备号进行绑定,对于同类产品,可以通过对usb连接口的定义加以区分。
# 创建udev规则 sudo vim /etc/udev/rule.d/usb_xxx.rules # 查询usb设备 lsusb # 规则文件中写入样式 KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5523", MODE:="0777", SYMLINK+="t214driver" # 注意:lsusb中 xxx:xxx 前者为设备号,后者为产品号 # 查询单个usb 串口的详细信息 # 例如查询 ttyUSB0 udevadm info --attribute-walk --name=/dev/ttyUSB0 service udev reload service udev restart
多个相同设备会出现相同的产品号和相同的设备号,系统就无法与其中的一个设备进行绑定
为了解决多设备问题,可以利用usb串口id进行区分两个设备
例如:执行
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"
ATTRS{devpath}=="5.2"
# 代表五个usb的hub, 该设备插接在第二个usb接口上
所以, 可以将devpath 属性作为区分每个设备的关键词
多个相同设备可以这样写rule文件
KERNEL=="ttyUSB*", ATTRS{devpath}=="5.2", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777",SYMLINK+="usb_dev_0"
KERNEL=="ttyUSB*", ATTRS{devpath}=="5.1", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0777",SYMLINK+="usb_dev_1"
在读取usb设备时可以应用绑定的名称进行读取,设备名称可以自己定义,
/dev/usb_dev_0
/dev/usb_dev_1
usb_rule设置完成后保存文件,更新设备
service udev reload
service udev restart
可以在/dev/中看到新定义的设备,设备名称为上文中自定义的设备名
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。