Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006

The Linux Manual

4.5. Recompilando o kernel

Índice

4.5.1. Passo 1 - Descompactando e configurando
4.5.2. Passo 2 - Compilação do kernel
4.5.3. Passo 3 - Instalando e ativando no sistema
4.5.4. Problema: Mensagens "Unresolved Symbols in Module X" no boot

Como você já deve saber (se não sabe tudo bem, vai saber agora) o kernel é o núcleo do sistema. É ele quem controla todo o hardware do computador, faz chamadas para a memória, sistema de arquivos, entre outros. Sem o kernel, o sistema simplesmente não tem pernas para andar, nem cérebro para pensar :)

A recompilação do kernel tem de ser extremamente observada... É nela que você poderá colocar suporte a muitos hardwares, habilitar recursos do kernel (como firewall e compartilhamento NAT), entre outras coisas. Muitas distribuições incluem kernels já compilados e prontos para usar, mas é sempre recomendado que você compile o seu kernel para otimizá-lo conforme suas necessidades e para aprender também! Então se você puder fazer experiências na máquina, por que não tentar e aprender mais sobre o núcleo desse maravilhoso sistema?

Vou explicar aqui, passo-a-passo, como se dá o processo de recompilação do kernel. Lembrando que toda operação deverá ser feita com o root.

4.5.1. Passo 1 - Descompactando e configurando

Primeiro você precisará pegar uma imagem e descompactá-la em algum diretório, para depois começar a configurar a compilação. Os códigos-fonte do kernel em suas várias versões podem ser todos encontrados através do seguinte endereço:

Depois de baixar o arquivo do kernel e deixá-lo por exemplo no diretório /root/download, é hora de descompactar:

# cd /usr/src
# rm -rf linux
# tar jpvfx /root/download/linux-2.6.12.tar.bz2
# ln -s linux-2.6.12 linux
# cd linux

Nos comandos acima, eu fui para o diretório /usr/src, removi algum fonte antigo do kernel do linux que poderia estar por lá (comando rm), descompactei o arquivo do fonte do kernel que baixei (no exemplo eu usei a versão 2.6.12, criei um link simbólico para o recém-descompactado diretório e depois entrei nesse diretório.

[Nota] Nota

Repare que eu descompactei e fiz um link simbólico. O link simbólico serve para referência à qual kernel estarei usando no momento. Se por acaso eu quiser compilar vários kernels com versões diferentes, descompacto todos no diretório /usr/src e crio o link simbólico para o que eu vou usar como padrão. Apenas um método opcional para facilitar a lembrança :)

Agora é hora de configurar o kernel. Para fazer isso, o próximo comando é:

# make menuconfig

Com este comando, você vai escolher as opções de suporte. Esta parte é com você, pois você é quem vai escolher o que quer. Tem muitas e muitas opções que você poderá não saber... Você pode ler o help destas opções, ou simplesmente deixá-las como estão. Configuração do kernel é uma coisa que você se acostuma com o tempo, praticando :)

[Dica] Dica

O comando make menuconfig gera um menu gráfico no console, você pode substituir este comando por outros, que são: make config (modo terminal, sem gráficos, vai perguntando opção por opção e não é recomendado), make xconfig (modo gráfico com janelas, só roda no X-Window) e make gconfig (modo gráfico usando o tipo de janela GTK).

Uma dúvida muito comum dos usuários quanto ao make menuconfig é que as vezes a compilação não funciona. Certifique-se de que você tem o pacote de desenvolvimento (ou seja, os cabeçalhos e bibliotecas) do ncurses. Geralmente o nome do pacote é ncurses-dev, ncurses-devel, ou algo parecido (dependendo da distribuição).

Depois de configurado, um arquivo chamado .config dentro do diretório dos fontes do kernel será criado. Este arquivo contém todas as definições das configurações que você fez. Pode ser bem útil você guardar este arquivo para saber a compilação exata que fez :)

4.5.2. Passo 2 - Compilação do kernel

Depois de tudo configurado, agora é hora da compilação do kernel. Essa é a parte mais simples! O trabalho todo é feito pelos desenvolvedores, que suaram bastante para fazer o código. Você só vai precisar de um:

# make

E o kernel vai se compilar todinho para você. Dependendo de quanta coisa você ativou na configuração do kernel e dependendo da sua máquina também, pode ser que demore ou não. Seja paciente, vá fazer um lanche, tomar uma água ou comer a pizza fria que sobrou :)

Depois de compilado o kernel, agora é hora de instalar os módulos do mesmo:

# make modules_install

Isso vai terminar de compilar os módulos do kernel e instalá-los na localização /lib/modules/versao-do-kernel. Substituindo é claro, versao-do-kernel pela versão que você compilou :)

4.5.3. Passo 3 - Instalando e ativando no sistema

O comando make do passo 2 criou o que chamamos de imagem do kernel. A imagem do kernel é uma pequena imagem compactada que será carregada no sistema quando ele iniciar. A partir daí essa imagem vai ter dar suporte a diversas coisas para o sistema começar a funcionar.

Essa imagem é normalmente chamada de vmlinuz e para instalá-la, comece copiando para o local correto:

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18

Então copiamos pro /boot, que é o lugar onde os kernels ficam batendo bapo e bebendo café (porque afinal, eles trabalham demais!).

Com a imagem copiada pro lugar correto e os módulos instalados também no local correto, basta você ajustar as configurações do LILO ou GRUB para refletir o seu novo kernel, indicando no lugar da imagem do kernel a sua recém-compilada imagem! Se não souber fazer isso, leia sobre como configurar o LILO (Seção 4.1, “Configurando o LILO”) ou GRUB (Seção 4.2, “Configurando o GRUB”) aqui mesmo neste manual :)

A recompilação do kernel é a única coisa no Linux que necessita reiniciar a máquina! Afinal, o kernel é o núcleo do sistema, então não dá pra recarregar um kernel diferente no lugar do outro, porque o outro já está funcionando... :) Reinicie sua máquina e boa sorte!

# reboot

Ou Ctrl-Alt-Del, ou...

# init 6
[Cuidado] Cuidado

Quem compila o kernel sabe: é bem provável que quando você inicie o sistema com o kernel novo você receba uma bela mensagem, o famoso Kernel Panic!

O Kernel Picnic significa que alguma coisa deu errado na compilação. Como por exemplo, você não ativou algum suporte importante e por isso o sistema não vai funcionar como deveria. Solução? SEMPRE deixe o kernel antigo junto com o novo, assim se o novo der defeito, você volta para o velho kernel e tenta compilar o kernel de novo, aprendendo a cada erro :)

4.5.4. Problema: Mensagens "Unresolved Symbols in Module X" no boot

Isso ocorre geralmente quando você recompila o kernel. Ao modificar a configuração do kernel, você pode estar tirando alguma coisa dele, sendo que no /lib/modules/versao-do-kernel o módulo já poderá estar instalado.

Para resolver isso, antes de dar o make modules_install na compilação do kernel, faça um:

# mv /lib/modules/versao-do-kernel /lib/modules/versao-do-kernel.old

Isso irá mover o diretório dos módulos para um outro (.old) e você poderá executar o make modules_install. Assim apenas os módulos do kernel serão instalados no diretório.

Depois se tudo der certo e você quiser, pode apagar o diretório antigo que você renomeou :)