UDEV规则配置usb摄像头

参考自:【linux】linux下摄像头设置固定的设备名-udev_linux 摄像头的设备文件名-CSDN博客

UDEV规则

在Linux系统中,UDEV(Userspace DEV)是一个用于管理设备节点和/dev目录下设备文件的动态设备管理器。当你连接USB摄像头或其他USB设备时,UDEV会自动识别并处理这些设备。然而,在某些情况下,你可能需要为USB摄像头配置特定的UDEV规则以满足特定的需求,比如设置权限、创建符号链接等。本文将介绍如何为USB摄像头配置UDEV规则。

希望对UEDV进一步了解的朋友可以看这篇:Linux的UDEV机制-CSDN博客

1. 识别USB摄像头

在配置UDEV规则之前,首先需要识别你的USB摄像头的设备ID。你可以使用lsusb命令来列出所有连接的USB设备及其ID。查看外设的设备号,主设备号:辅助设备号

执行如下命令

lsusb

在输出中,你会看到类似于以下的行:

这里的1e45:8022

就是设备ID,你需要记下它以便在后续的UDEV规则中使用。

 idVendor: 1e45
 idProduct:   8022

2. 配置 udev规则:

UDEV规则文件通常存储在/etc/udev/rules.d/目录下。你需要以root用户或具有sudo权限的用户身份创建一个新的规则文件。规则文件的命名通常遵循xx-your-rule.rules的格式,其中xx是一个数字,用于确定规则文件的加载顺序。

sudo nano /etc/udev/rules.d/99-usb-camera.rules

进入指定路径

cd /etc/udev/rules.d/


新建video.rules

sudo vi video.rules

添加如下内容:

KERNEL=="video*", ATTRS{idVendor}=="1e45", ATTRS{idProduct}=="8022",MODE="0777",SYMLINK+="mycamera"

注意:
 把ATTRS{idVendor}=="1e45", ATTRS{idProduct}=="8022", 替换成自己的设备ID
 

 

3. 重新加载UDEV规则

在编写完规则文件后,你需要重新加载UDEV规则以使更改生效。这可以通过重启系统或使用udevadm命令来完成。但是,更简单的方法是使用udevadm control --reload-rules命令重新加载规则文件。

udevadm control --reload-rules

然后,你需要触发UDEV事件以重新处理已连接的设备。你可以使用udevadm trigger命令来实现这一点。

sudo udevadm trigger

4. 测试配置

现在,你可以断开并重新连接USB摄像头,或者重新启动系统来测试配置是否生效。你可以使用v4l2-ctlffmpeg等工具来检查摄像头是否可以被正确识别并访问。

例如,使用v4l2-ctl --list-devices命令列出所有可用的视频设备:

v4l2-ctl --list-devices


 

验证 那哪个设备号 是可行的可行: 


sudo fswebcam -d /dev/video1 --no-banner -r 1280x720 -S 5 ./image.jpg
 

注意video1 根据自己的实际情况编写/修改

配置mjpg-steam开机自启

固定好设备号后,我们就能配置mjpg-steam的开机自启了

安装配置 mjpg-streamer 

下载 mjpg-streamer

Gitee 的镜像下载:
orangepi@orangepi:~ $ git clone https://gitee.com/leeboby/mjpg-streamer
安装依赖的软件包 - Ubuntu
sudo apt-get install -y cmake libjpeg8-dev

编译安装 mjpg-streamer

 1)安装好后先进入到文件夹下
cd mjpg-streamer/mjpg-streamer-experimental

2)编译

make -j4

3)安装

sudo make install
4)配置服务
vi ./start.sh
将我们前面定义的设备名: mycamera 加进去

配置开机自启服务

cd 命令进入home目录

cd

创建shell脚本

vim mjpg.sh

编辑 rc.local

 vim /etc/rc.local
 
添加如下内容
// 为什么要加两次呢,这里是重复调用防止开机自启失败

#!/bin/sh -e
/home/orangepi/mjpg.sh &

cd /home/orangepi/mjpg-streamer/mjpg-streamer-experimental
./start.sh


exit 0
 

配置好后  :wq  保存退出

重启   

sudo reboot

开机,可以看到服务已经打开

服务重启大全(一定要看)

如果前面的步骤都是对的但还是无法实现开机自启和固定摄像头设备怎么办呢,下面给出的是本文的关键,依次执行如下七条命令,大概率能帮你解决这类问题

// 每次修改后记得重启以下服务:
设置开机自启命令
sudo systemctl start rc-local.service                       启动服务
sudo systemctl enable rc-local.service                    开机自动启动
sudo systemctl daemon-reload                              更新服务
sudo systemctl restart rc-local.service                   重启服务
sudo systemctl status rc-local.service                    查看当前服务状态


//每次固定 摄像头设备号的
sudo udevadm control --reload-rules
sudo udevadm trigger

rc.loacl补充

rc.local 是一个在 Unix 和 Unix-like 系统中常见的初始化脚本,特别是在基于 SysVinit 的系统(如较旧的 Linux 发行版)中。当系统完成其启动过程(即所有系统级的初始化脚本都已运行)并准备将控制权交给用户时,rc.local 脚本会被执行。这为用户提供了一个在系统完全启动后运行自定义命令或启动服务的机会。

rc.local 脚本通常位于 /etc/ 目录下,并且是一个可执行文件。在某些系统中,它可能是一个链接到另一个目录(如 /etc/init.d/)的符号链接。

rc.local 的内容通常类似于以下形式:

 

bash复制代码

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 启动自定义服务或运行命令
/path/to/your/custom/command &
exit 0

请注意以下几点:

  1. 脚本的第一行(#!/bin/sh -e)指定了用于解释脚本的 shell(在这种情况下是 /bin/sh)以及选项 -e,这表示如果任何命令失败(返回非零状态),则整个脚本将立即退出。
  2. 脚本中包含了一些注释,解释了其用途和如何启用/禁用它。
  3. 在注释之后,你可以添加你自己的命令或启动服务的命令。
  4. 脚本最后以 exit 0 结束,表示成功执行。

然而,需要注意的是,现代的 Linux 发行版(如 Ubuntu 16.04+ 和 Debian 8+)已经逐渐淘汰了 SysVinit,转而使用更现代的初始化系统,如 systemd。在 systemd 中,rc.local 并不被直接支持,但你可以通过安装一个特殊的软件包(如 systemd-rc-local-generator)或使用 systemd 的服务单元文件来模拟其功能。

如果你在使用基于 systemd 的系统,并希望在系统启动时运行自定义命令,你应该考虑创建一个 systemd 服务单元文件并将其放置在 /etc/systemd/system/ 或 /lib/systemd/system/ 目录中。

nano补充

在Linux系统中,nano 是一个简单易用的文本编辑器,特别适合初学者和需要快速编辑文本文件的用户。它提供了基本的文本编辑功能,如打开文件、保存文件、复制、粘贴、查找和替换等,但不像vimemacs那样具有复杂的快捷键和模式。

如果你在使用nano来编辑UDEV规则文件,你可以按照以下步骤操作:

  1. 打开终端(Terminal)。

  2. 使用sudo命令以root用户权限打开nano编辑器来编辑UDEV规则文件。例如,如果你想编辑99-usb-camera.rules文件,可以运行:

sudo nano /etc/udev/rules.d/99-usb-camera.rules
  1. nano编辑器中,你可以使用以下基本快捷键:

    • Ctrl + O 保存文件。
    • Ctrl + X 退出编辑器。
    • Ctrl + K 剪切文本(剪切的文本会被复制到缓冲区)。
    • Ctrl + U 粘贴文本(粘贴之前剪切或复制的文本)。
    • Ctrl + W 查找文本。
    • Alt + W 查找下一个匹配的文本。
    • 使用箭头键(↑、↓、←、→)来移动光标。
    • 使用Backspace键删除字符,或使用Ctrl + K删除整行。
  2. 在编辑器中输入你的UDEV规则,例如:

 

bash复制代码

SUBSYSTEM=="video4linux", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666"
  1. 使用Ctrl + O保存文件,然后使用Ctrl + X退出nano编辑器。

  2. 接下来,你可以使用udevadm命令来重新加载UDEV规则并触发设备事件,如之前所述。

请注意,在编辑系统文件时,特别是使用sudo权限时,要小心不要误删除或修改重要的内容。如果你不确定某个步骤,请先在网上搜索或咨询有经验的用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值