我目前正在尝试在 Wandboard 板上运行 2 个网络摄像头,它们必须共享一个 USB 集线器。问题是,当前的驱动程序实现(仅限 YUV)使 USB 集线器饱和,最后我只能连接一个摄像头。
然而,UVC 驱动程序实现对这种情况和其他情况有一个怪癖。
问题是,我没有找到任何关于如何加载这些怪癖的文档。你能帮我解决这个问题吗?
我目前正在尝试在 Wandboard 板上运行 2 个网络摄像头,它们必须共享一个 USB 集线器。问题是,当前的驱动程序实现(仅限 YUV)使 USB 集线器饱和,最后我只能连接一个摄像头。
然而,UVC 驱动程序实现对这种情况和其他情况有一个怪癖。
问题是,我没有找到任何关于如何加载这些怪癖的文档。你能帮我解决这个问题吗?
您可以通过传递一些参数来改变许多内核模块的行为。
您可以使用以下命令获取所有可用模块参数的列表modinfo
:
# modinfo uvcvideo
说明有一个“quirks”参数,可以使用。查看您发布的常见问题解答,似乎quirks
真的是一个位域,所以如果您想启用多个怪癖,您必须添加数字。
首先卸载驱动程序(显然这样做时你不能使用它):
# rmmod uvcvideo
然后用参数重新加载它quirks
。假设您要同时启用UVC_QUIRK_FIX_BANDWIDTH
(具有 hex-value 0x80
,即128
十进制)和UVC_QUIRK_RESTRICT_FRAME_RATE
(因此是0x200
)512
,您将使用 quirks 值640
(即128+512
resp. 0x200|0x80
):
# modprobe uvcvideo quirks=640
为了使 umläute 的答案在重启后仍然存在,我创建了/etc/modprobe.d/uvcvideo.conf
包含内容的文件
options uvcvideo quirks=0x80
要让模块重新加载uvcvideo.conf
,卸载并加载模块:
rmmod uvcvideo
modprobe uvcvideo
有趣的是,使用echo
设置quirks
(即uvcvideo
加载时)不起作用,即使UVC 驱动程序常见问题解答使用echo
修改.trace
uvcvideo
注意:在我的案例中(在 Ubuntu 14.04 上),UVC_QUIRK_FIX_BANDWIDTH 为每个 USB 主机控制器启用了许多 Microsoft LifeCam Cinema 网络摄像头,用于机器视觉应用程序。LifeCam Cinema 保留了大约 48% 的 USB 2.0 带宽(根据 Windows 上的设备管理器),因此每个主机控制器最多可以运行两个 LifeCam。(对于几个主机控制器芯片,我什至仅限于一个没有怪癖的 LifeCam。)