Mateus Müller

Disseminando conhecimento :)

27 Nov 2019

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:

Como COMPILAR um DRIVER no Linux

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.

Como COMPILAR um DRIVER no Linux

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:

Como COMPILAR um DRIVER no Linux

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

Como COMPILAR um DRIVER no Linux

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!
Comentários Disqus