我目前正試圖在Wandboard板上運行2 webcams,它必須共享一個USB集線器。問題是,目前的驅動程序實現(僅限YUV)使USB集線器飽和,最終我只能連接一個攝像頭。如何在Linux UVC驅動程序中啓用UVC_QUIRK_FIX_BANDWIDTH怪癖?
然而,UVC驅動程序的實現有一個這種情況和其他問題的怪癖。
問題是,我沒有找到關於如何加載這些怪癖的任何文檔。 你能幫我一下嗎?
我目前正試圖在Wandboard板上運行2 webcams,它必須共享一個USB集線器。問題是,目前的驅動程序實現(僅限YUV)使USB集線器飽和,最終我只能連接一個攝像頭。如何在Linux UVC驅動程序中啓用UVC_QUIRK_FIX_BANDWIDTH怪癖?
然而,UVC驅動程序的實現有一個這種情況和其他問題的怪癖。
問題是,我沒有找到關於如何加載這些怪癖的任何文檔。 你能幫我一下嗎?
你可以通過傳遞一些參數來改變許多內核模塊的行爲。
你可以得到的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
爲了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
修改的uvcvideo
的trace
參數。
注意:UVC_QUIRK_FIX_BANDWIDTH爲我的情況(在Ubuntu 14.04上)啓用了許多用於機器視覺應用的每個USB主機控制器的Microsoft LifeCam Cinema網絡攝像頭。 LifeCam Cinema保留USB 2.0帶寬的48%(根據Windows上的設備管理器),因此,如果沒有這個怪癖,每個主機控制器最多可以運行兩個LifeCam。 (對於多個主機控制器芯片,我甚至將其限制爲一個LifeCam,而沒有任何問題。)
PS:怪癖對於壓縮格式不起作用(但LifeCam,例如仍保留USB 2.0帶寬的48%);這[答](http://stackoverflow.com/a/23881125/1628638)有一個UVC驅動程序破解,使怪癖也適用於壓縮格式。還沒有嘗試過黑客,但代碼看起來是正確的。 :) – 2016-02-12 19:33:17