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