如何在Linux UVC Driver中启用UVC_QUIRK_FIX_BANDWIDTH怪癖?

Adr*_*ițu 7 linux v4l2 uvc

我目前正在尝试在Wandboard主板上运行2个网络摄像头,这些主板必须共享USB集线器.问题是,当前的驱动程序实现(仅限YUV)使USB集线器饱和,最后我只能连接一个摄像头.

然而,UVC驱动实现有此怪癖样的情况,等等.

问题是,我没有找到任何关于如何加载这些怪癖的文档.你可以帮助我吗?

uml*_*ute 14

您可以通过传递一些参数来更改许多内核模块的行为.

您可以使用以下modinfo命令获取所有可用模块参数的列表:

# modinfo uvcvideo
Run Code Online (Sandbox Code Playgroud)

表明存在可以使用的"怪癖"参数.看看你发布的常见问题,似乎quirks真的是一个位域,所以如果你想要启用多个怪癖,你必须添加数字.

首先卸载驱动程序(显然你这样做时不能使用它):

 # rmmod uvcvideo
Run Code Online (Sandbox Code Playgroud)

然后用quirks参数重新加载它.假设你想要启用两者UVC_QUIRK_FIX_BANDWIDTH(具有十六进制值0x80,128十进制值)和UVC_QUIRK_RESTRICT_FRAME_RATE(0x200因此512)你将使用一个怪癖值640(即128+512resp.0x200|0x80):

 # modprobe uvcvideo quirks=640
Run Code Online (Sandbox Code Playgroud)


Ulr*_*ern 6

为了使 umläute 的答案在重启后继续存在,我创建了/etc/modprobe.d/uvcvideo.conf包含内容的文件

options uvcvideo quirks=0x80
Run Code Online (Sandbox Code Playgroud)

要让模块重新加载uvcvideo.conf,卸载和加载模块:

rmmod uvcvideo
modprobe uvcvideo
Run Code Online (Sandbox Code Playgroud)

有趣的是,采用echo以组quirks(即同时uvcvideo加载)没有工作,即使UVC驱动程序FAQ使用echo修改trace的参数uvcvideo

注意:在我的案例中(在 Ubuntu 14.04 上),UVC_QUIRK_FIX_BANDWIDTH 为机器视觉应用程序为每个 USB 主机控制器启用了许多 Microsoft LifeCam Cinema 网络摄像头。LifeCam Cinema 保留了大约 48% 的 USB 2.0 带宽(根据 Windows 上的设备管理器),因此没有怪癖,每个主机控制器最多可以运行两个 LifeCam。(对于几个主控制器芯片,我什至仅限于一个 LifeCam 而没有这个怪癖。)

  • PS:这个怪癖不适用于压缩格式(但 LifeCam,例如,仍然保留了 USB 2.0 带宽的 48%);这个 [answer](http://stackoverflow.com/a/23881125/1628638) 有一个 UVC 驱动程序黑客,使这个怪癖也适用于压缩格式。没有尝试过 hack,但代码看起来是正确的。:) (2认同)