2014-09-02 106 views
4

我目前正試圖在Wandboard板上運行2 webcams,它必須共享一個USB集線器。問題是,目前的驅動程序實現(僅限YUV)使USB集線器飽和,最終我只能連接一個攝像頭。如何在Linux UVC驅動程序中啓用UVC_QUIRK_FIX_BANDWIDTH怪癖?

然而,UVC驅動程序的實現有一個這種情況和其他問題的怪癖。

問題是,我沒有找到關於如何加載這些怪癖的任何文檔。 你能幫我一下嗎?

回答

8

你可以通過傳遞一些參數來改變許多內核模塊的行爲。

你可以得到的modinfo命令所有可用的模塊參數列表:

# modinfo uvcvideo 

表明,有一個「怪癖」的參數,它可以使用。 看着你發佈的faq,看起來quirks確實是一個bitfield,所以如果你想啓用多個怪癖,你必須添加數字。

先卸載驅動程序(顯然這麼做的時候,你不能使用它):

# rmmod uvcvideo 

然後用quirks參數重新加載它。 假設你要同時啓用UVC_QUIRK_FIX_BANDWIDTH(其十六進制值0x80,這是十進制128)和UVC_QUIRK_RESTRICT_FRAME_RATE(這是0x200因此512),需要使用的640一個怪癖值(這是128+512 RESP 0x200|0x80):

# modprobe uvcvideo quirks=640 
3

爲了umläute的答案生存重新啓動,我創建的文件/etc/modprobe.d/uvcvideo.conf與內容

options uvcvideo quirks=0x80 

爲了讓模塊REL OAD uvcvideo.conf,卸載和加載模塊:

rmmod uvcvideo 
modprobe uvcvideo 

有趣的是,使用echo設置quirks(即,而uvcvideo加載)沒有工作,即使UVC driver FAQ使用echo修改的uvcvideotrace參數。

注意:UVC_QUIRK_FIX_BANDWIDTH爲我的情況(在Ubuntu 14.04上)啓用了許多用於機器視覺應用的每個USB主機控制器的Microsoft LifeCam Cinema網絡攝像頭。 LifeCam Cinema保留USB 2.0帶寬的48%(根據Windows上的設備管理器),因此,如果沒有這個怪癖,每個主機控制器最多可以運行兩個LifeCam。 (對於多個主機控制器芯片,我甚至將其限制爲一個LifeCam,而沒有任何問題。)

+0

PS:怪癖對於壓縮格式不起作用(但LifeCam,例如仍保留USB 2.0帶寬的48%);這[答](http://stackoverflow.com/a/23881125/1628638)有一個UVC驅動程序破解,使怪癖也適用於壓縮格式。還沒有嘗試過黑客,但代碼看起來是正確的。 :) – 2016-02-12 19:33:17