Como COMPILAR um DRIVER no Linux
Já escrevi algumas vezes sobre compilação aqui no blog, seja de Kernel ou seja drivers no geral, mas nunca é de mais reforçar esse tipo de conhecimento que contribui muito para o entendimento do sistema como um todo.
Recentemente, tive um grande problema com um adaptador wireless USB da TP-link no Linux, que inclusive não consegui resolver, mas consegui instalar o módulo (ou driver, como preferir) e decidi mostrar aqui o processo quando esse tipo de coisa acontece.
Requisitos
Para que você extraia o máximo dessa dica, é interessante que você já tenha alguma familiaridade com o sistema Linux, linha de comando no geral…
Caso não tenha e você tenha interesse em obter isso por um preço de um pastel e um latão de Skol, veja meu curso abaixo:
Encontrando o hardware
A primeira coisa a se fazer nesses casos é identificar o modelo do seu hardware, e se possível o chipset também, que é a “placa interna” usada no dispositivo.
No meu caso, o aparelho é um TP-Link Archer T3U. Dentro dele, se usa um chipset da Realtek 8822BU. O chipset é o mais importante para nós.
Você pode listar essas informações usando os dois comandos abaixo:
Veja meu TP-Link ali no meio.
Mas, a melhor forma de encontrar o chipset que seu dispositivo usa é lendo o manual ou usando o tio Google.
Depois que você já sabe o modelo, é hora de começar a testar. Primeiro, garanta que o dispositivo é reconhecido no lsusb (se for USB) ou no lspci (se for PCI). Se não for, possivelmente você pode ter um problema de hardware.
Buscando pelo módulo
A primeira coisa que tenho que ver é se existe algum módulo no sistema para subir manualmente com o modprobe.
Geralmente coloco os primeiros dígitos que eu ACHO que são e dou TABTAB para ver se aparece algo. Por estar usando Realtek, geralmente ele começa com “rtl” ou “88” que é o número do chipset.
No meu caso, não havia isso. Pesquisei no Google e realmente não tem suporte para esse dispositivo USB. Um driver foi lançado no Kernel 5.0 para o mesmo chipset, mas PCI, ou seja, não funcionou também.
Geralmente pesquiso dessa forma:
Veja que a busca encontrou alguns repositórios de alguns desenvolvedores que criaram esse módulo. Obviamente, tem o risco do código ter algum backdoor ou algo do gênero, nunca se sabe, já que ainda não está no Kernel.
Mas, até pesquisei sobre o desenvolvedor e parece que ele também ajuda a desenvolver coisas do Kernel, então acredito estar tudo bem…
Clicando aqui você pode ver um exemplo do GitHub com as instruções de instalação.
Compilando
Primeiro, devemos clonar o repositório para ter acesso aos arquivos.
$ git clone https://github.com/brandon-bailey/rtl8822bu
$ cd rtl8822bu
$ ls
Basicamente o que devemos fazer agora é compilar e instalar, que por sinal é muito simples.
$ make
$ make install
Se você tiver alguns problemas, tenho algumas sugestões:
- Rodar como root.
- Instalar o linux-headers. Você precisa dele para compilar.
Depois de instalado, pode subir o módulo com o “modprobe nome_do_modulo”". O ideal também é reiniciar o equipamento.
Outro problema que você vai enfrentar é que, a cada atualização de Kernel da sua distro, o módulo deverá ser compilado novamente. Para que o módulo seja compilado automaticamente a cada upgrade, deve-se usar o DKMS.
Conclusão
Compilar um módulo não é tão difícil quanto parece, e até que é bastante divertido. Pode ser que você venha a ter problemas na compilação do código escrito em “C” durante o “make”, mas aí eu também não sei como resolver. De qualquer forma, fica o aprendizado e não desista, sempre dá pra tentar algo mais!
Me siga no Instagram onde eu faço conteúdos da minha rotina diária.
Participe dos nossos grupos no Telegram e Facebook! 🙂
Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!