文章目录
- 查看摄像头索引
- 绑定摄像头方法:
- 方法一
- 方法二
- 特殊情况处理:ID相同,一个摄像头两个索引同时出现
- 结果
以前项目中用的系统为ubuntu16.04最近由于项目需要,系统需要升级到ubuntu20.04,但是升级后面临着插入一个usb摄像头对应着两个索引的问题,由于这两个索引就只有一个能打开摄像头,所以绑定后打开摄像头的时候有可能就定位到不能打开摄像头的索引,就造成了有的时候不能打开摄像头的现象。
查看摄像头索引
ls /dev/video*
绑定摄像头方法:
方法一
- 将USB摄像头入USB口,通过lsusb查看端口信息。
例如:
图片中第三行就是USB摄像头的信息
- 在/etc/udev/rules.d/下,创建.rules 规则配置文件
- 编写样例如下,其中 ATTRS{idVendor} 填 ID 的前四位,ATTRS{idProduct} 填 ID 的后四位,MODE 是权限设置,SYMLINK+= 是自定义的串口绑定名称。
注意:这个ID由芯片制造商设置,可以唯一表示该设备
例如:10-local.rules
在该文件中写入以下内容完成绑定:
KERNEL=="video*", ATTRS{idVendor}=="1689", ATTRS{idProduct}=="2304", MODE:="0777", SYMLINK+="video_left"
方法二
但是有时候, 很多厂商由于特殊原因,在串口芯片上,写入的设备号的名字 都是一样的。
图片中第三、四行就是两个USB摄像头的信息,从图片中可以看到两个摄像头的ID是一样的。
所以要用到 另外一个办法,就是通过绑定设备的硬件端口号 ,如下命令
ls /sys/class/video4linux/video* -l
- 在/etc/udev/rules.d/下,创建.rules 规则配置文件;如:10-local.rules
- 编写样例如下,KERNEL==“video*”,KERNELS==“2-4.2:1.0”, MODE:=“0777”, GROUP:=“dialout”, SYMLINK+=“video_up”。
在该文件中写入以下内容完成绑定:
KERNEL=="video*",KERNELS=="2-4.2:1.0", MODE:="0777", GROUP:="dialout", SYMLINK+="video_up"
特殊情况处理:ID相同,一个摄像头两个索引同时出现
- 两个摄像头,每个摄像头两个索引;每个索引KERNELS相同;
- 上图video0和video1代表一个摄像头。
- 每个摄像头的ID相同;
在以上两种情况下为了区分两个摄像头可以加入ATTR{index}=="0"进行区分;
查看 ATTR{index}等信息的指令如下:
sudo udevadm info --attribute-walk --name=/dev/video0
结果1:
结果2:
结果3:
结果4:
从以上两图可以知道同一个摄像头的video0和video1或video0和video1两个的ATTR{index}是不一样的,索引可以加上这一项进行区分。
- 在/etc/udev/rules.d/下,创建.rules 规则配置文件;如:10-local.rules
- 编写样例如下,KERNEL==“video0”, ATTR{index} == “0”, KERNELS ==“2-4.2:1.0”, MODE:=“0777”, SYMLINK+=“video_right”。
在该文件中写入以下内容完成绑定:
KERNEL=="video0", ATTR{index}=="0", KERNELS=="2-4.2:1.0", MODE:="0777", SYMLINK+="video_right"
KERNEL=="video2", ATTR{index}=="0", KERNELS=="2-4.3:1.0", MODE:="0777", SYMLINK+="video_left"
结果
完成绑定后重启计算机,就完成了USB 口的映射;
结果: