树莓派(一) 基于UBUNTU系统的USB设备重命名
·
在linux系统中,usb设备通常以ttyUSB*的方式在系统中挂载,如果同时连接多个usb设备,各个设备难以区分,而且存在读取权限的问题,在每次使用时都要对其进行权限修改,使用起来相当麻烦,因此,需要对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设备
多个相同设备会出现相同的产品号和相同的设备号,系统就无法与其中的一个设备进行绑定
为了解决多设备问题,可以利用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/中看到新定义的设备,设备名称为上文中自定义的设备名
enjoy!
更多推荐



所有评论(0)