![即使重新启动后,如何将 v4l2 USB 摄像机绑定到相同的设备名称?](https://linux22.com/image/32357/%E5%8D%B3%E4%BD%BF%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%90%8E%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%20v4l2%20USB%20%E6%91%84%E5%83%8F%E6%9C%BA%E7%BB%91%E5%AE%9A%E5%88%B0%E7%9B%B8%E5%90%8C%E7%9A%84%E8%AE%BE%E5%A4%87%E5%90%8D%E7%A7%B0%EF%BC%9F.png)
我在一台 PC 上有 3 个 USB 摄像头,其中一个摄像头将不使用,可以忽略。我需要强制将两个相同的相机映射到恒定的设备名称(例如/dev/video1
和/dev/video2
)。相机不应更改其顺序(假设相机 1 安装为video1
相机 2,video2
断开连接后它们的顺序应相同,而不是相机 1 --> /dev/video2
、相机 2 --> /dev/video1
。如何使此设置起作用?
我将把相机输出提供给Gstreamer。相机正在使用v4l2和紫外线驱动程序接口。有问题的 Linux 发行版是ArchLinux、摄像头 - 一些 Logitech 网络摄像头。
答案1
我建议您使用 USB 相机的独特属性(序列号?端口号?)自动创建/dev
符号链接。udev
请参阅此(也应适用于 Arch)udev规则教程。或者也许这个教程更清楚。
您可以使用以下方式获取设备的属性列表:
sudo udevadm info --query=all --name=/dev/video1
然后
sudo udevadm info --query=all --name=/dev/video2
找到不同之处并.rules
在其中创建一个文件/etc/udev/rules.d
(例如,您可以用作99-myvideocards.rules
文件名);假设您想使用序列号,您会得到一个如下所示的规则集:
ATTRS{ID_SERIAL}=="0123456789", SYMLINK+="myfirstvideocard"
ATTRS{ID_SERIAL}=="1234567890", SYMLINK+="mysecondvideocard"
拔掉/重新插入您的设备(或重新启动后)后,您将得到/dev/myfirstvideocard
和/dev/mysecondvideocard
始终指向相同的设备。
答案2
Patrice Levesque 方法工作正常,但我发现 Linux 中已经有符号链接,如/dev/v4l/by-id/usb-046d_0819_92E84F10-video-index0
文件夹中/dev/v4l/by-id/
,因此如果程序可以接受除/dev/videoX
.