如何在Linux UVC驱动程序中启用UVC_QUIRK_FIX_BANDWIDTH怪癖?

我目前正在试图在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_RATE640128+5120x200|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来修改uvcvideotrace参数,使用echo设置quirks (即加载uvcvideo )也uvcvideo

注意:UVC_QUIRK_FIX_BANDWIDTH在我的情况下(在Ubuntu 14.04上)为每台USB主机控制器启用了许多微软LifeCam Cinema网络摄像头,用于机器视觉应用。 LifeCam Cinema保留了USB 2.0带宽的48%(根据Windows设备管理器),所以没有这个怪事,每个主机控制器最多可以运行两个LifeCam。 (对于几个主机控制器芯片,我甚至只限于一个LifeCam而没有这个怪癖。)