我正在工作站上尝试新的网络摄像头,该工作站迄今为止没有连接视频捕获设备。它应该是即插即用的,但一旦连接,任何程序都无法找到相机。
首先,我检查了内核本身是否正在识别相机:
$ lsusb
[...]
Bus 001 Device 007: ID 046d:082d Logitech, Inc. HD Pro Webcam C920
[...]
所以有摄像头,肯定是软件的东西。使用 Linux 视频检查连接的设备提供了更多线索:
$ v4l2-ctl --list-devices
Cannot open device /dev/video0, exiting.
看起来内核模块被禁用了,所以我尝试启动它:
$ sudo modprobe v4l2loopback
modprobe: FATAL: Module v4l2loopback not found in directory /lib/modules/5.4.0-81-generic
奇怪的是,模块甚至没有安装。然后我把它从包里拿出来再试一次:
$ sudo aptitude install v4l2loopback-dkms
[...]
$ sudo modprobe v4l2loopback
modprobe: ERROR: could not insert 'v4l2loopback': Unknown symbol in module, or unknown parameter (see dmesg)
这就是我在消息中发现的:
$ dmesg
[...]
[1271004.074955] v4l2loopback: Unknown symbol video_ioctl2 (err -2)
[1271004.075027] v4l2loopback: Unknown symbol v4l2_ctrl_handler_init_class (err -2)
[1271004.075105] v4l2loopback: Unknown symbol video_devdata (err -2)
[1271004.075167] v4l2loopback: Unknown symbol v4l2_ctrl_new_custom (err -2)
[1271004.075221] v4l2loopback: Unknown symbol video_unregister_device (err -2)
[1271004.075276] v4l2loopback: Unknown symbol video_device_alloc (err -2)
[1271004.075336] v4l2loopback: Unknown symbol v4l2_device_register (err -2)
[1271004.075410] v4l2loopback: Unknown symbol __video_register_device (err -2)
[1271004.075463] v4l2loopback: Unknown symbol v4l2_ctrl_handler_free (err -2)
[1271004.075513] v4l2loopback: Unknown symbol v4l2_device_unregister (err -2)
[1271004.075562] v4l2loopback: Unknown symbol video_device_release (err -2)
我相信这意味着缺少一些软件依赖项。但是哪个?在 GitHub 上有一个 cloud context 的讨论,但解决方案过于笼统(安装所有可用的额外包模块)。
经过一番搜索后,我发现了一些奇怪的东西,这个系统上实际上没有安装任何额外的内核模块:
这是一个明显的罪魁祸首,我安装了该软件包并再次尝试:
尽管使模块恢复了生机,但网络摄像头对软件仍然是不可见的。但这是另一个问题。