udev 规则似乎无法正常工作,无法强制将 USB 设备放入固定位置

udev 规则似乎无法正常工作,无法强制将 USB 设备放入固定位置

我已经创建了一个 udev 规则,强制将我的 USB 设备放入固定文件夹中/dev/ (一个是网络摄像头/dev/video1,另一个是帧抓取器/dev/video0),我需要这样做是因为默认情况下,我将网络摄像头在帧抓取器之后连接到我的计算机(到目前为止一切顺利)但如果我重新启动系统(当它们仍然连接时),网络摄像头将被分配给/dev/video0帧抓取器,/dev/video1这将导致应用程序尝试将它们用作录制资源(在本例中为 gstreamer 管道)失败

我输入25-video-devices.rules/etc/udev/rules.d/重新加载 udev 规则,甚至重新启动 udev 服务,但重新启动系统后结果仍然一样......

SUBSYSTEMS=="usb", ATTRS{idVendor}=="5555", ATTRS{idProduct}=="3500", NAME:="video0", OPTIONS:="link_priority=100"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", NAME:="video1"

似乎 udev 规则不能正常运行或者我做错了什么或者遗漏了什么?

你能帮助我吗?

ps: 我使用以下方法获取了供应商和产品 IDlsusb

答案1

man 7 udev(我重点标注):

内核通常只是根据发现的顺序分配不可预测的设备名称。[…]udev 不能更改设备节点的名称,只能创建额外的符号链接。

换句话说,我认为您将无法可靠地使用/dev/video0/dev/video1。相反,您应该创建并使用稳定的符号链接。类似下面的方法可能会起作用:

KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="5555", ATTRS{idProduct}=="3500", SYMLINK+="myframegrabber"
KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", SYMLINK+="mywebcam"

然后您就可以在您的应用程序中使用/dev/mywebcam/dev/myframegrabber

顺便说一句,正如最近提到的类似的答案

video4linux 可能已经为您提供了稳定的设备名称。您可能需要检查目录/dev/v4l/by-id//dev/v4l/by-path/

相关内容