Imagem do terminal no menu de compilação

A compilação dos módulos do kernel Linux é um processo que ocorre na compilação do próprio kernel, se você quer compilar um kernel novo é necessário compilar os módulos também.

Mas há quem pense que não dá pra compilar os módulos do kernel sem compilar o kernel junto, ou seja, por causa de um único módulo o usuário pode acabar compilando o kernel inteiro desnecessariamente.

Hoje vou compartilhar com vocês uma forma para recompilar apenas o módulo que você precisa sem ter que compilar todo o kernel junto.

Compilando somente os módulos

Vamos começar, digamos que você queira apenas compilar um módulo para o kernel que você já está utilizando, aquele que foi instalado pelo próprio sistema, por exemplo.

Primeiro precisamos instalar as dependências necessárias para a compilação, dependências como o pacote build-essentials, ncurses-dev e libssl-dev.

Segundo, abrir o terminal e seguir os comandos:

$ sudo su

Para entrar no modo root

# apt install linux-headers-$(uname -r)

Para baixar código fonte das configurações do kernel

# apt source linux-image-$(uname -r)

Para baixar o código fonte do kernel, necessário para suprir quais quer componentes que o modulo possa precisar na hora da compilação.

# cd /usr/src/
# tar xf linux-source-5.10.tar.xz

(5.10 é um exemplo, lembre-se disso)

# cd /usr/src/linux-source-5.10

Com esses 3 comandos acima, o terminal vai ir para o diretório /usr/src que contem os headers e sources, descompactar o pacote contendo o kernel a ser compilado e entrar na pasta nova que foi criada ao extrair o kernel.

# cp ../linux-headers-$(uname -r)/Module.symvers .

Para copiar a “lista de simbolos exportados” do sistema para o código fonte do kernel.

# make oldconfig

Para copiar o arquivo .config do kernel atual.

A seguir vamos precisar editar o arquivo .config e fazer com que o módulo seja compilado.

Use um editor de texto, como o nano por exemplo:

# nano .config

A seguir vamos precisar que o comando make, que vai ser executado em breve, inclua o módulo para compilação.

Por exemplo, preciso compilar o modulo da minha placa de rede, no comando lsmod o módulo é o r8169, e como eu quero compilar ele a linha que eu devo procurar é:

CONFIG_R8169

Ao encontrar a CONFIG_ edite a linha e faça com que o final seja “=m

Ficando: CONFIG_R8169=m

Agora podemos continuar, use o comando abaixo:

# make prepare

Para preparar os arquivos para compilação e checar previamente por erros antes de rodar o make install.

# make modules_prepare

Mesma coisa do comando acima, mas dedicado aos módulos

# make M=scripts/mod

# make M=drivers/net/ethernet/realtek/ modules

Para executar o script de compilação para módulos e em seguida iniciar a compilação dos módutos.

Com isso você já compilou o módulo, agora só precisa aplica-lo no diretório de módulos do sistema.

Você pode simplesmente usar o comando cp para copiar o módulo diretamente para o diretório do kernel.

# cp drivers/net/ethernet/realtek/r8169.ko /lib/modules/5.10.0-14-amd64/kernel/drivers/net/ethernet/realtek/

ou

# make M=drivers/net/ethernet/realtek/ modules_install

# depmod

Que vai instalar todos os módulos que estão presentes junto com o que você precisa e em seguida rodar o depmod para gerar os arquivos de mapeamento de modulo do kernel.

# modprobe r8169

Que vai carregar e ativar o módulo novo, que consequentemente vai ativar o driver ou função no sistema.

Passo a passo reproduzido no Q4OS ‘Gemini’ (Baseado no Debian Bullseye)

Com isso concluímos, seu módulo foi rapidamente compilado e você se livrou de minutos sem PC ao evitar de compilar o kernel inteiro.

Espero que tenha sido útil, até a próxima.

Referencias: