Mateus Müller

O carinha do Linux

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