O que é HID_MAX_USAGES?

3

Pergunta: O que é HID_MAX_USAGES? Para que isso é usado? E por que o valor é tão pequeno?

(linha de código:

#define HID_MAX_USAGES                        12288

em

/usr/src/linux/include/linux/hid.h 

Informação de fundo: Eu preciso definir o valor para 32k e rekompile o kernel. Caso contrário, meu mouse de jogo não é reconhecido pelo Ubuntu. Então, quero saber para que esse valor é bom antes de mudar meu sistema.

    
por Sergej Werfel 04.02.2013 / 14:28

1 resposta

3

Acho que o HID_MAX_USAGES é tão "pequeno" porque um descritor de relatório do dispositivo HID nos casos em que os dispositivos ocultos reportam o tamanho certo, o tamanho é muito menor e, nesse caso, o descritor não excederá o tamanho codificado em HID_MAX_USAGES limit.

Quando você perceber que o teclado ou o mouse não está funcionando e depois de recompilar o kernel com o aumento de HID_MAX_USES , o dispositivo começa a funcionar. Isso é mais provável porque o limite inferior rejeitaria a análise do descritor relatado.

Após ler e pesquisar, alguns inspecionaram alguns drivers do Linux que pareciam substituir o que o dispositivo reportava. Por exemplo. se o dispositivo informasse que tinha 2 ^ 15, o driver poderia substituí-lo pelo máximo permitido pelo HID_MAX_USAGES , ou com os usos do dispositivo realmente dimensionados.

Portanto, resumindo resumidamente, basicamente o que acontece, o descritor de relatório de dispositivo oculta especifica um número excessivamente grande de usos do consumidor (por exemplo, 2 ^ 15), que é mais do que HID_MAX_USAGES . Isso impede a análise adequada do descritor relatado e, muito provavelmente, o dispositivo ou partes dele não funcionarão.

Eu tenho usado o truque sujo de incrementar o HID_MAX_USAGES em um ambiente de produção. Quão sujo está, perguntei sem boas respostas. Mas com o meu conhecimento, posso ver que o hack deixa uma pegada de memória maior, eu não olhei se poderia ser um pouco capaz de prejudicar um pouco o desempenho. Eu não pude ver o hack a representar qualquer risco de segurança. (Por favor, corrija-me se eu estiver errado.)

Acredito que incrementar o HID_MAX_USAGES em um relatório de erros está fora de questão para qualquer kernel da linha principal, não é uma solução ideal. Rater Eu sugeriria que você enviasse um relatório detalhado de erros sobre o fato de seu mouse não funcionar. Você também pode agitar a fabricação de seu produto para adicionar suporte adequado em um driver.

Extensão ( fonte ):

On Tue, 21 May 2013, Christian Ohm wrote:

> Is there any reason why HID_MAX_USAGES shouldn't be more than 12288?  

Well, the reasoning is a mixture of current implementation, and 
reasonability.

- we currently have statically allocated arrays on a per-parser basis, for 
  parsing usages and collection indices. If the number of max usages is 
  going to grow in an uncontrolled manner, we'll have to change the way 
  our parser works (which is not impossible, of course).

- most of the ocurences of huge max usages being presented by the devices 
  have actually turned out to be bogus and could have been fixed by 
  patching the report descriptor in order to reflect the real behavior of 
  the device

Thanks,

-- 
Jiri Kosina
SUSE Labs

O trecho acima é do mantenedor do kernel do subsistema oculto.

    
por Anders F. U. Kiær 27.09.2013 / 15:47