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.