Mateus Müller

O carinha do Linux

13 ago. 2017

LPIC-2: Aprenda como compilar o Kernel do Linux

Neste artigo vou explicar o que é o Kernel, por que compilar o Kernel e, mais do que isso, como compilar o Kernel do Linux de forma simples e rápida, sem enrolação. Além disso, este artigo pode ser levado como base para algumas questões da prova LPIC-2.

O que é o Kernel?

O Kernel é basicamente o coração do sistema. Todas as instruções de como fazer o gerenciamento do hardware e do sistema estão escritas no Kernel.

Por que compilar o Kernel?

Para ser mais prático, vamos à um exemplo. Digamos que você tem uma placa-mãe da Gigabyte e sua placa de rede integrada é uma Realtek. No Kernel que você está usando (digamos que é o 4.9) não há suporte para esta placa de rede, ou seja, ela está em off e você não pode navegar na rede. Você leu na documentação do Kernel 4.12 que o suporte para esta placa foi adicionado. Neste caso, faz sentido você atualizar o Kernel para ter suporte ao novo módulo.

Sempre devo compilar o Kernel?

Não, o ideal é deixar sempre no Kernel default da sua distro, pois esta versão é que foi homologada e testada para funcionar sem gargalos.

Posso ter problemas depois de compilar o Kernel?

Sim, pode. Você está alterando a parte que controla tudo no equipamento. Comigo, em especial, nunca ocorreu nenhum problema que fizesse algo parar de funcionar, tudo continuou normal. Mesmo que você tenha problemas, ainda será possível bootar pelo Kernel antigo para utilizar o sistema, então vale a tentativa de atualização para correção de algum erro.

Aprenda definitivamente como compilar o Kernel do Linux:

Antes de tudo, entenda que o Kernel é desenvolvido pela Kernel Org. O topo máximo desta cadeia é o Sr. Linus Torvalds, criador do Linux. Todas as revisões e quem “bate o martelo” para lançar um Kernel é ele.

Em meu equipamento, estou utilizando um Debian Stretch com Kernel 4.9.0-3 e estarei atualizando para o Kernel 4.12.4. Este modo de compilação serve para qualquer distribuição.

Para realizar o download do Kernel, clique aqui e selecione a opção Latest Stable Kernel.

Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

Veja que, na parte de baixo, há uma lista de versões mais antigas do Kernel. Você pode tentar compilar qualquer uma delas baixando o tarball.

Dependências para compilar o Kernel:

OBS: As dependências abaixo são para distribuições Debian-based, ou seja, se você usa RedHat-based ou Slackware-based, precisa identificar os pacotes equivalentes à estes.

Build-essential: Este é um “pacotão” de compiladores. Ele contém o make, gcc, gcc++, dpkg-dev, etc. É necessário porque vamos instalar o make – comando que vai entender as instruções e compilar o Kernel.

libssl-dev: Librarie de segurança que utiliza o protocolo SSL.

libncurses5-dev; Necessário para criar uma interface gŕafica para criação do arquivo de configuração do Kernel. Neste caso, instalando somente esta lib pode não funcionar, então sugiro instalar todo o pacote do ncurses.

Vamos lá:

$ sudo su
$ apt-get install build-essential libssl-dev ncurses* -y

Agora, vamos extrair o Kernel baixado:

$ cd /home/mateus/Downloads
$ tar xvf linux-4.12.4.tar.xz

Uma pasta Linux 4.12.4 foi criada. Vamos acessá-la e verificar o que consta dentro:

$ cd linux-4.12.4.
$ ls –color
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

Agora, vamos configurar o Makefile para compilarmos posteriormente (se você não sabe o que é um Makefile, leia este artigo):

$ make menuconfig

Uma tela como esta será aberta. Nela, é possível personalizar o que você deseja ou não compilar deste Kernel, personalizando conforme sua necessidade:

Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

OBS: O comando make config faz a mesma coisa que o make menuconfig, porém, sem interface gráfica.

Depois de finalizado este processo, um arquivo .config será criado e o arquivo Makefile será modificado com as instruções que selecionamos na interface gráfica acima.

Agora vamos, de fato, compilar o Kernel:

$ make -j4

OBS: Se você não sabe o que o parâmetro -j faz, leia este artigo.

Este processo demora bastante se você não usar a opção -j. Então, meu amigo, vá ver um filme, tomar um café, correr com sua namorada…

Depois de finalizado, vamos compilar os módulos:

$ make modules

Após compilar, vamos instalar os módulos:

$ make modules_install
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

E, para finalizar, vamos instalar o Kernel com os módulos compilados:

$ make install

Processo finalizado. Vamos testar?

Reinicie o equipamento e acesse as opções avançadas de boot:

Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

Você verá o seu Kernel antigo e o Kernel novo (default):

Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

Depois de iniciar o Linux, é possível verificar se o Kernel foi compilado com o seguinte comando:

$ uname -a
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux
Dica de LPIC-2: Aprenda como compilar o Kernel do Linux

Informações extras:

Existe outra forma de compilar o Kernel?

Existe outra variação para compilar e instalar o Kernel utilizando o make bzImage. A diferença é que você terá que criar o arquivo Initrd manualmente e depois adicionar uma entrada de boot no Grub. Aqui temos um exemplo no blog do Diolinux.

Como desinstalar o Kernel?

Se você quiser desinstalar o Kernel, você pode simplesmente deletar todos os arquivos que possuem a extensão do Kernel – 4.12 – dentro do diretório /boot. Depois disso, deletar toda a pasta de módulos deste Kernel em /lib/modules. E para finalizar, rodar o comando update-grub novamente para reescrever o menu de boot.

Qual a diferença entre make mrproper e make clean?

Caso você queira iniciar o procedimento de compilação do zero, é interessante que você zere os arquivos e módulos já compilados (extensões .o e .ko).

Para remover somente os arquivos de objeto (extensões .o e .ko) você pode rodar o comando make clean.

Se você quiser remover todos os objetos, e ainda mais, remover o .config, arquivos de dependência e todo o resto que o make menuconfig (ou make config) cria, você pode utilizar o comando make mrproper.

Obrigado, e até a próxima!

Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!

Comentários Disqus