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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论