【linux】linux下摄像头设置固定的设备名-udev

7 篇文章 0 订阅
7 篇文章 0 订阅

本文使用环境:
开发板:linux(都行)
摄像头:普通USB摄像头即可

word is cheap show me the code

一、为什么写这篇文章?

^^^^为什么写这篇文章? 众所周知,插入外设时,在/dev/下会出现各种各样的设备文件,这些文件根据你的外设不同而不同。比如插入摄像头时会出现:
在这里插入图片描述
^^^^这样在应用程序中可以直接open和read。但是在实际使用过程中,如果不小心碰到了,或者接口松动了,这个设备文件会变成/dev/video2/dev/video3,这样的话程序就会报错,无法读取video0的,那么能不能固定插入的设备名称呢????答案是可以的,因此有了这篇文章。

二、udev

2.1 什么是udev?

^^^^简而言之,udev就是一种规则,能将你插入的设备固定为唯一指定的别名。such as:你想把你的usb摄像头命名为came0,无论你/dev下的video号如何变化,系统都会生成唯一的came0。udev能帮你实现,当然不止摄像头,一切外设都能实现。具体是什么自行查阅资料。

三、设置udev规则

3.1 查看usb ID

^^^^第一步查看外设的设备号,主设备号:辅助设备号。使用命令:lsusb
在这里插入图片描述
^^^^通过插上和拔出可以看出本文所用设备的ID为:32e4:9422

3.2 查看usb设备的信息

^^^^使用如下命令:udevadm info -a -p /sys/class/video4linux/video0

在这里插入图片描述
^^^^主要看上图中标记的几个地方。这几个地方都是我用的摄像头唯一的标识。
注意 :我用的摄像头有两路视频输出,vide0和video1,两路分别输出普通视频数据和压缩视频数据,所以我这里多加了一个限制条件:ATTR{index}==“0”,如果你的摄像头时单路的,就不需要这一个条件

3.3 编辑规则

^^^^进入/etc/udev/rules.d/文件夹下,新建video.rules文件,文件内容如下:

KERNEL=="video*" , ATTRS{idVendor}== "32e4", ATTRS{idProduct}=="9422", ATTR{index}=="0",MODE:="0777", SYMLINK+="came0"
KERNEL=="video*" , ATTRS{idVendor}== "32e4", ATTRS{idProduct}=="9422", ATTR{index}=="1",MODE:="0777", SYMLINK+="came1"

^^^^上述内容和3.2查到的内容一一对应。根据自己的实际情况进行修改即可。上述规则生效后会在/dev/下生成/dev/came0和/dev/came1两个摄像头。配置完成后关机重启
^^^^新建好后如下:
在这里插入图片描述

3.4 使用设备

^^^^上述步骤执行完成后,再次查看dev下设备。
在这里插入图片描述
^^^^此时设备已经正确加载到dev下。使用时就更为简单了,
如果使用opencv:

cap("/dev/came0");

如果使用open打开:

dev = open("/dev/video1",O_RDWR);

4、 扩展

^^^^当然除了绑定设备以外,你还可以绑定对应的USB口,每个USB口都有一个唯一的定义,比如:

在这里插入图片描述
^^^^可以看出我的摄像头接的是1.3这个口,我用的hub进行的usb扩展。你可以在规则中添加绑定:

KERNELS=="1-1.3:1.0"

这样插入的设备可以直接变成你想要的名称。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr·赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值