目录
1.问题的出现
通过我之前的文章配置完摄像头的开机自启动之后我们会发现有的时候会出现启动不了的情况,通过实验我发现是摄像头的设备名发生了改变,而我们在start.sh脚本哪里配置的又是固定的所以就会出现启动不了的情况。所以我们应该把设备名给固定
2.热插拔udev机制
udev就是一种规则,能将你插入的设备固定为唯一指定的别名。你想把你的usb摄像头命名为came0
,无论你/dev
下的video
号如何变化,系统都会生成唯一的came0
。udev能帮你实现,当然不止摄像头,一切外设都能实现。具体的udev的介绍可以自行查阅资料。
3.设置udev的规则
1.查看usb ID
查看外设的设备号,主设备号:辅助设备号。使用命令:lsusb
通过拔插我们可以发现我们摄像头的ID是1e45:8022
2. 查看usb设备的信息
使用以下命令查看usb设备信息,注意不一定是video2根据自己的进行调整
udevadm info -a -p /sys/class/video4linux/video2
ATTRS{idProduct}=="8022"
ATTRS{idVendor}=="1e45"
这里就是我们之前查到的摄像头id
主要看上图中标记的几个地方。这几个地方可以用作我们的摄像头唯一标识
3.编译规则
进入/etc/udev/rules.d/
文件夹下,新建video.rules
文件,文件内容如下:
KERNEL=="video*" , ATTRS{idVendor}== "1e45", ATTRS{idProduct}=="8022",ATTR{index}=="0",MODE:="0777", SYMLINK+="camera"
注意上述内容和2
查到的设备信息内容一一对应。根据自己的实际情况进行修改即可。上述规则生效后会在/dev/
下生成/dev/camera文件
。配置完成后关机重启
重启之后再次查看dev
下设备
camera -> video2说明我们现在摄像头使用的设备名是video2
到这里说明我们的固定名称已经配置完成了,我们还需要去修改我们的start.sh脚本的内容,把设备名修改成我们固定的名称
然后重启系统,使用以下命令查看我们摄像头的服务有没有启动
ps -aux | grep mjpg_streamer
通过这些配置,我们摄像头服务就能做到每次开机自动启动,而且也不会因为设备名发生了改变而出现启动失败的情况。
4.拓展
除了绑定设备以外,你还可以绑定对应的USB口,每个USB口都有一个唯一的定义。输入以下命令可以查看usb口的使用
ls -l /sys/class/video4linux/
通过两次输入的对比可以看出我的摄像头的定义是2-1:1.0,可以在规则中添加绑定:
KERNELS=="2-1:1.0"