适用于rk3399pro中使用
第一安装好cheese软件用于检测摄像头是否能正常工作
sudo apt-get cheese
随后在debian的软件包里即可打开这个软件,可以看到对应的拍照录像等功能
第二安装 v4l2-ctrl工具
sudo apt install v4l-utils
使用这个工具查看摄像头的参数
v4l2-ctl --list-devices
toybrick@debian10:~$ v4l2-ctl --list-devices
rkisp10_selfpath (platform:rkisp10-000):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
rkisp10_selfpath (platform:rkisp10-001):
/dev/video4
/dev/video5
/dev/video6
/dev/video7
UVC Camera (046d:0825) (usb-xhci-hcd.10.auto-1.3.2):
/dev/video8
/dev/video9
查看设备节点情况
ls -l /dev/video* -l
toybrick@debian10:~$ ls -l /dev/video* -l
crw-rw----+ 1 root video 81, 0 Nov 20 14:00 /dev/video0
crw-rw----+ 1 root video 81, 1 Nov 20 14:00 /dev/video1
crw-rw----+ 1 root video 81, 2 Nov 20 14:00 /dev/video2
crw-rw----+ 1 root video 81, 3 Nov 20 14:00 /dev/video3
crw-rw----+ 1 root video 81, 4 Nov 20 14:00 /dev/video4
crw-rw----+ 1 root video 81, 5 Nov 20 14:00 /dev/video5
crw-rw----+ 1 root video 81, 6 Nov 20 14:00 /dev/video6
crw-rw----+ 1 root video 81, 7 Nov 20 14:00 /dev/video7
crw-rw----+ 1 root video 81, 8 Nov 20 14:00 /dev/video8
crw-rw----+ 1 root video 81, 9 Nov 20 14:00 /dev/video9
2.解决过程
2.1 查看 /dev/video10 和 /dev/video11详细信息
udevadm info --attribute-walk --name=/dev/video8
udevadm info --attribute-walk --name=/dev/video9
2.2 使用udev规则创建usb摄像头挂载点映射
在 /etc/udev/rules.d/*.rules (任意rules下),添加如下规则
SUBSYSTEM==“video*”,ATTRS{idVendor}“05a3”,ATTRS{idProduct}“9750”,MODE=“0666”,SYMLINK+=“video1”
SUBSYSTEM==“video*”,ATTRS{idVendor}“05e3”,ATTRS{idProduct}“0610”,MODE=“0666”,SYMLINK+=“video0”
`如果只配置ATTRS{idVendor},ATTRS{idProduct}这两个id参数,会随机指定一个 /dev/video10 和 /dev/video11映射到指定的 /dev/video1 ,由于RK3399PRO的bug的存在(插入一个usb摄像头会产生两个video标号),不能满足使用要求。
通过观察2.1的详细信息,发现 /dev/video10 和 /dev/video11的ATTR{index}不同(分别为0、1),又指定ATTR{index}实现分别对应映射
SUBSYSTEM==“video*”,ATTRS{idVendor}“05e3”,ATTRS{idProduct}“0610”,ATTR{index}“0”,MODE=“0666”,SYMLINK+=“video0”
SUBSYSTEM"video*",ATTRS{idVendor}“046b”,ATTRS{idProduct}“0610”,ATTR{index}==“1”,MODE=“0666”,SYMLINK+=“video1”
结果如下:
/etc/udev/rules.d/*.rules里内容如下:
总结:Linux下opencv无法打开摄像头,/dev/video 设备节点被占用,无法删除,转变思路,使用udev规则创建usb摄像头挂载点映射,固定设备节点名称,这样我们就可以继续愉快的开发了。