Lista negra de um dispositivo USB somente para uso pelo uvcvideo [closed]

2

Estou usando vários dispositivos USB em um pequeno ODROID executando o Gentoo:

> uname
3.10.80

> lsusb
Bus 001 Device 005: ID 1b71:0056 Fushicai
Bus 001 Device 004: ID 0bda:2832 Realtek Semiconductor Corp. RTL2832U DVB-T
Bus 001 Device 003: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU     802.11a/b/g/n/ac WLAN Adapter
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

O "Fushicai" é uma pequena webcam USB que provou funcionar neste hardware e kernel. O "RTL2832U DVB-T" é usado por alguns softwares proprietários para decodificar comunicações de rádio de aviação.

Infelizmente, o uvcvideo é bloqueado para "RTL2832U DVB-T" e ignora o dispositivo "Fushicai". Existe uma maneira de configurar o uvcvideo para fazer o contrário, algum tipo de lista negra e whitelist do uvcvideo?

Aqui está a saída dmesg depois de conectar a câmera sem nenhum outro dispositivo USB conectado:

[   54.790233] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[   55.043458] uvcvideo: Found UVC 1.00 device <unnamed> (0000:0000)
[   55.043470] ------------[ cut here ]------------
[   55.043486] WARNING: at drivers/media/media-device.c:375 media_device_register+0x64/0xd8()
[   55.043491] Modules linked in: snd_usbmidi_lib uvcvideo(+) snd_rawmidi snd_seq_device videobuf2_vmalloc nf_conntrack_ipv4 nf_defrag_ipv4 iptable_filter ip_tables nf_conntrack_ipv6 nf_defrag_ipv6 xt_conntrack nf_conntrack ip6table_filter ip6_tables w1_gpio wire aml_gpio
[   55.043537] CPU: 3 PID: 2135 Comm: systemd-udevd Not tainted 3.10.80-odroidc1 #16
[   55.043566] [<c0014e64>] (unwind_backtrace+0x0/0xec) from [<c0011ea0>] (show_stack+0x10/0x14)
[   55.043581] [<c0011ea0>] (show_stack+0x10/0x14) from [<c002d848>] (warn_slowpath_common+0x54/0x6c)
[   55.043593] [<c002d848>] (warn_slowpath_common+0x54/0x6c) from [<c002d8fc>] (warn_slowpath_null+0x1c/0x24)
[   55.043605] [<c002d8fc>] (warn_slowpath_null+0x1c/0x24) from [<c0313708>] (media_device_register+0x64/0xd8)
[   55.043639] [<c0313708>] (media_device_register+0x64/0xd8) from [<bf07afe4>] (uvc_probe+0x4c4/0xd70 [uvcvideo])
[   55.043792] [<bf07afe4>] (uvc_probe+0x4c4/0xd70 [uvcvideo]) from [<c02dacc0>] (usb_probe_interface+0x16c/0x244)
[   55.043823] [<c02dacc0>] (usb_probe_interface+0x16c/0x244) from [<c028adfc>] (driver_probe_device+0xd4/0x21c)
[   55.043836] [<c028adfc>] (driver_probe_device+0xd4/0x21c) from [<c028aff0>] (__driver_attach+0x68/0x8c)
[   55.043851] [<c028aff0>] (__driver_attach+0x68/0x8c) from [<c02892b0>] (bus_for_each_dev+0x4c/0xa4)
[   55.043864] [<c02892b0>] (bus_for_each_dev+0x4c/0xa4) from [<c028a4e8>] (bus_add_driver+0xd0/0x258)
[   55.043877] [<c028a4e8>] (bus_add_driver+0xd0/0x258) from [<c028b60c>] (driver_register+0xa8/0x140)
[   55.043888] [<c028b60c>] (driver_register+0xa8/0x140) from [<c02d99bc>] (usb_register_driver+0x70/0x128)
[   55.043913] [<c02d99bc>] (usb_register_driver+0x70/0x128) from [<bf08c020>] (uvc_init+0x20/0x4c [uvcvideo])
[   55.043947] [<bf08c020>] (uvc_init+0x20/0x4c [uvcvideo]) from [<c0008544>] (do_one_initcall+0xa0/0x148)
[   55.043964] [<c0008544>] (do_one_initcall+0xa0/0x148) from [<c0082854>] (load_module+0xbbc/0xf78)
[   55.043978] [<c0082854>] (load_module+0xbbc/0xf78) from [<c0082d54>] (SyS_finit_module+0x60/0x70)
[   55.043991] [<c0082d54>] (SyS_finit_module+0x60/0x70) from [<c000e000>] (ret_fast_syscall+0x0/0x38)
[   55.043998] ---[ end trace e93c02068fb3ea25 ]---
[   55.044391] usbcore: registered new interface driver uvcvideo
[   55.044401] USB Video Class driver (1.1.1)
[   55.076760] 3:3:1: cannot get freq at ep 0x84
[   55.094503] usbcore: registered new interface driver snd-usb-audio

E isso é o que é carregado depois:

Module                  Size  Used by
snd_usb_audio         121616  0
snd_hwdep               5819  1 snd_usb_audio
snd_usbmidi_lib        17238  1 snd_usb_audio
uvcvideo               70500  0
snd_rawmidi            19419  1 snd_usbmidi_lib
snd_seq_device          5968  1 snd_rawmidi
videobuf2_vmalloc       2747  1 uvcvideo
nf_conntrack_ipv4      13630  1
nf_defrag_ipv4          1310  1 nf_conntrack_ipv4
iptable_filter          1540  1
ip_tables              11650  1 iptable_filter
nf_conntrack_ipv6       8123  1
nf_defrag_ipv6         14338  1 nf_conntrack_ipv6
xt_conntrack            2899  2
nf_conntrack           81773  3 xt_conntrack,nf_conntrack_ipv4,nf_conntrack_ipv6
ip6table_filter         1489  1
ip6_tables             11914  1 ip6table_filter
w1_gpio                 3326  0
wire                   20699  1 w1_gpio
aml_gpio                7825  0
    
por svoop 20.02.2017 / 08:39

2 respostas

0

O uvcvideo não pode manipular seu Fushicai: ele produz um aviso em dmesg e não consegue se comunicar corretamente com ele por USB ( 3:3:1: cannot get freq at ep 0x84 ). Este é um bug no uvcvideo, ou o Fushicai espera um protocolo um pouco diferente (precisa de uma correção "peculiar" no driver), ou o Fushicai precisa de um protocolo totalmente diferente (ou seja, alguém precisa escrever um driver para ele). / p>

Registre um relatório de erros com os desenvolvedores uvcvideo e veja se eles têm uma ideia do que fazer.

    
por 23.02.2017 / 20:56
0

Acontece que o initramfs foi quebrado. Reconstruir tudo do zero foi o suficiente.

    
por 24.02.2017 / 18:12