linux下摄像头设置固定的设备名

本文讲述了在配置USB摄像头开机自启动时遇到设备名改变的问题,通过热插拔udev机制,设置规则固定设备名(如came0),查看并匹配设备ID,创建udev规则文件,最终实现摄像头设备名的稳定,确保开机自启动功能正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

2.热插拔udev机制

3.设置udev的规则

1.查看usb ID

 2. 查看usb设备的信息

3.编译规则

4.拓展


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"
### 如何在 Ubuntu 系统中为摄像头设置固定设备称 为了确保每次启动时都能识别并分配相同的设备给特定的 USB 设备,可以通过 udev 规则来实现这一目标。具体方法如下: #### 创建 UDEV 规则文件 进入 `/etc/udev/rules.d` 目录下新建一个规则文件,比如命为 `99-webcam.rules`。 ```bash sudo nano /etc/udev/rules.d/99-webcam.rules ``` #### 获取设备属性 使用命令获取所需配置的信息,例如通过以下方式查看当前已连接的所有USB视频类设备及其属性: ```bash for i in /sys/class/video4linux/*; do echo "$(basename $i): $(cat $i/name)"; done lsusb -v | grep -A 5 "Interface Descriptor" ``` 这些信息有助于编写更精确匹配条件的UDEV规则[^1]。 #### 编写规则内容 假设要将某个品牌型号的网络摄像机始终挂载为 `/dev/camera0` ,可以依据上述查询到的独特标识符(如 ID_MODEL 或者其他唯一字段),编辑刚才创建好的 `.rules` 文件加入类似下面的一行或多行定义语句: ```bash SUBSYSTEM=="video4linux", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", SYMLINK+="camera0" ``` 其中 xxxx 和 yyyy 是具体的 Vendor ID 和 Product ID 。如果不确定这两个值,则可以在前面提到过的 lsusb 输出里找到对应的条目。 保存退出后使新规则生效: ```bash sudo udevadm control --reload-rules && sudo udevadm trigger ``` 此时再插拔一次摄像头硬件应该就能看到它被赋予了预期中的路径节点称了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值