1、问题背景:
在ubuntu系统下开发代码时候,会遇到这样的问题:一个项目可能需要若干串口设备或相机连接到主机上,如果仅仅用端口序号识别设备的话,一旦出现断电或者重新插拔设备情况,代码就会出现找不到设备或者找错设备的错误,因为序号分配是随机的。为了解决这个问题,可以将不同设备的属性信息绑定到usb序号上,这样不管usb序号如何变化,只需要通过绑定后的别名去查找设备即可。
2、Usb相机设备绑定
2.1查询USB相机信息:
终端输入:
udevadm info -a /dev/video0
若video0不存在则改为(2或者4或者6等偶数值)或者直接改成video*
输出类似如下信息即可:
获取需要的相机信息如下:
ID_MODEL_ID=045e,ID_VENDOR=0811,KERNELS=“1-12”
2.2新建规则文件:
在/etc/udev/rules.d文件夹中建立usb_cam.rules文件
sudo gedit /etc/udev/rules.d/usb_cam.rules
里面写入如下内容:
KERNEL=="video[0,2,4,6,8]*",KERNELS=="1-9", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0811", MODE:="0777", SYMLINK+="usbcam"
注意:将上述参数改为自己从步骤一和步骤二中得到的参数,其中video 0、1 代表同一个设备,因此只取偶数位来处理即可 ,kernels为固定端口查询.
其中usbcam为你自定义的端口名。
2.3激活规则:
sudo udevadm trigger
sudo /etc/init.d/udev restart
2.4验证:
ls -l /dev |grep video
查看是否如下存在箭头指向固定端口,若存在则代表端口绑定成功!接着代码里面就可把原先的video0改成现在的usbcam了。
3、USB串口设备绑定
Usb串口设备绑定思路跟相机类似,只是类型不一样,下面简单介绍步骤和命令:
3.1查询设备
终端输入:lsusb
获取设备信息如上。
3.2新建规则文件:
cd /etc/udev/rules.d/
sudo gedit usb.rules
内容如下:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666", SYMLINK+="IMU"
3 .3验证:
查看是否如下存在箭头指向固定端口,若存在则代表端口绑定成功!因为现在没有串口设备了,无法查看。
ls -l /dev | grep ttyUSB