Primeiro plano de fundo. Estou desenvolvendo um driver para dispositivos do painel de jogos da Logitech. É um teclado com uma tela nele. O driver está funcionando bem, mas por padrão o dispositivo é tratado pela HID. Para evitar que a HID assuma o controle do dispositivo antes do meu driver, posso colocá-lo na lista negra no hid-core.c. Isso funciona, mas não é a melhor solução, pois estou trabalhando com várias pessoas e todos temos que manter o patch do nosso módulo HID que está se tornando uma tarefa árdua, especialmente porque muitas vezes envolve a reconstrução de initramfs e tal.
Fiz algumas pesquisas sobre esse problema e encontrei este post na lista de discussão , que acabou me levando a este artigo no LWN . Isso descreve um mecanismo para vincular dispositivos a drivers específicos em tempo de execução. Parece exatamente o que eu preciso.
Então, eu tentei. Consegui desatar o teclado da HID. Isso funcionou e, como esperado, não era mais possível digitar. Mas quando tentei vinculá-lo ao nosso driver, recebo "erro: não existe esse dispositivo" e a operação falha.
Portanto, minha pergunta é: Como uso as operações de vinculação / desativação do kernel para replicar o que acontece quando você coloca na lista negra um dispositivo HID no hid-core e fornece seu próprio driver? - isto é - para substituir a necessidade de corrigir o hid-core.c o tempo todo?
A fonte do nosso driver está aqui: https://github.com/ali1234/lg4l