目录
一、问题说明
二、解决思路
三、开干
一、问题说明
在使用USB摄像头时,由于使用了两个摄像头,故此在上电启动后,设备号会发生变化,比如设备1之前时video0,有的时候上电会变成video1,有时候也会变成其他的情况。经过查阅各种资料,网上写的不够全面,有时候 没法解决问题。
二、解决思路
首先查看接入的各个USB设备的详细信息,通过设备的信息中不同点映射到不同设备名称。
三、开干
1、首先查看系统中的设备驱动,命令如下:
sudo ls /dev/
返回如下形式;
显示了所有的驱动设备。通过拔掉设备和插入设备返回的信息可以知道USB设备的设备号,我的是video0、video1、video2、video3。
这里需要说明一下,我插入的是两个设备,出来了4个设备号,这是正常的。其中两两为一组,可以查看他们的权限。输入指令查看video0和video1的设备信息。
v4l2-ctl -D -d /dev/video0
video0返回如下信息:
video1返回如下信息:
可以看出来,video1的设备没有视频权限。故此平时使用的时候需要使用video0
2、查看USB设备信息(我是USB摄像头,所以是video设备,如果是串口是ttyUSB这种),使用如下指令:
sudo udevadm info --attribute-walk --name=/dev/video0
再查看video1的设备信息,返回如下:
可以发现,video0和video1不同的地方只有KERNEL和ATTR{index}。
这俩下面要用,记得留意。
然后相同的方法查看video2和video3,返回如下信息:
video3返回如下:
找到这些信息后就可以进行映射设置。在路径/etc/udev/rules.d/下面创建文件为50-video.rules,名字任意,扩展名为rules,前面数字可有可无,如果有,系统将按照这个数字优先执行,数越小越先执行。
在文件内加入如下代码:
KERNEL =="video*",ATTR{index}=="0",KERNELS=="1-1.4",MODE:="0777",SYMLINK+="my_video1"
KERNEL =="video*",ATTR{index}=="0",KERNELS=="1-1.5",MODE:="0777",SYMLINK+="my_video2"
说明:
KERNEL =="video*" 这个为设备类型要是video设备,后面的*是通配符,如video0 video1 .。。。这种。
ATTR{index}=="0",这个是同一个设备会创建两个设备号,通过这个进行区分,相同设备,为0的具有视频权限。
KERNELS=="1-1.4",这个可以为1-1.4,也可以为1-1.4:1.0。只要是 能和第二个设备区分开就可。
MODE:="0777",这个是给设备权限,最高。
SYMLINK+="my_video1"这里的my_video1就是我们自定义的设备名字,以后只要这个设备插入这个usb口就会是这个名字。名字可以任意取。另外主要双引号要是英文的双引号,不然无法成功。
第二条同上,因为我有两个设备。如果为了严谨,还能加入
SUBSYSTEMS=="usb"
DRIVERS=="uvcvideo"
用以限制设备类型。一旦固定完成,USB口就不能更换了,设备要与USB口一一对应。
然后对设备重启,可以查看驱动设备号如下:
可以看到设备已经被固定成为可用设备。
有问题请留言
2022年6月5日
于北京 多云
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)