我已经创建了一个 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/
。