Compilando e instalando o kernel

Depois de salvar a configuração, o próximo passo é fazer a compilação propriamente dita, gerando o executável do novo kernel e em seguida os módulos, o que é feito com três comandos.

O primeiro é o “make clean”, que serve para limpar a casa, removendo restos de compilações anteriores e módulos desnecessários.

# make clean

Em versões antigas (da série 2.4) era necessário rodar também o comando “make dep”, que verifica a cadeia de interdependências do kernel, mas ele deixou de ser necessário a partir da série 2.6.

Ao executar o “make clean”, todos os módulos e componentes anteriormente compilados são removidos, fazendo com que a compilação seja realmente feita a partir do zero. Se você já compilou o kernel anteriormente e fez agora
apenas uma pequena modificação (como ativar um módulo adicional), pode omitir o “make clean”, de forma que os objetos gerados na compilação anterior sejam aproveitados e a compilação seja muito mais rápida.

O próximo passo é o “make” que compila o executável principal do kernel, o arquivo que vai na pasta /boot. O tempo varia de acordo com a velocidade do processador, mas é sempre relativamente rápido, já que estamos falando de
um executável com cerca de 2 MB. Em um PC atual, demora poucos minutos.

# make

No final do processo de compilação você verá um relatório informando o tamanho da imagem (importante, já que o tamanho do executável do kernel influencia o tempo de boot e o consumo de memória) gerada, como em:

Setup is 12444 bytes (padded to 12800 bytes).
System is 1526 kB
CRC b148216f
Kernel: arch/x86/boot/bzImage is ready (#1)

Em máquinas com processadores dual-core, você pode reduzir o tempo de compilação usando a opção “-j4”, que faz com que o make processe 4 módulos de cada vez, ao invés de apenas um como faria por padrão. Isto faz com que o
segundo processador realmente fique ocupado, reduzindo em até 40% o tempo de compilação. Neste caso, o comando fica:

# make -j4

Este comando também pode ser utilizado em máquinas com apenas um processador (ou com um Pentium 4 com HT), mas neste caso o ganho de performance é bem menor. Geralmente você terá melhores resultados usando a opção “-j2”
(apenas dois módulos por vez, ao invés de quatro).

Em versões antigas do kernel, era usado o comando “make zImage” mas ele tem uma limitação quanto ao tamanho máximo do kernel a ser gerado, por isso só funciona em kernels muito antigos, da série 2.0. Em seguida, passou a ser
usado o “make bzImage”, que permitia gerar kernels sem limite de tamanho.

A partir da versão 2.6.16, o comando foi simplificado, já que, por causa do limite de tamanho, não existe mais nenhum motivo para alguém gerar uma “zImage”. Com isso, o comando de compilação passou a ser apenas “make”, como
usado em outros programas.

Depois de compilar o executável principal, temos o “make modules”, que conclui o trabalho, compilando todos os componentes marcados como módulos. Assim como no comando anterior, você pode acrescentar o “-j4” ou “-j2” para
reduzir o tempo de compilação, como em:

# make -j4 modules 

Concluída a compilação, falta apenas copiar os arquivos e fazer a configuração do gerenciador de boot.

O executável principal do kernel é gravado no arquivo “arch/i386/boot/bzImage”, dentro do diretório de compilação. É necessário copiá-lo manualmente para a pasta “/boot”. Aproveite para renomear o arquivo, incluindo o número
da versão:

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.26-1

Além do arquivo principal, é necessário instalar também os módulos, que são copiados para um diretório na pasta “/lib/modules” (criado automaticamente) correspondente à versão do kernel, como em “/lib/modules/2.6.26”. Para
isto, use o:

# make modules_install

Um passo que pode ou não ser necessário, de acordo com o conjunto de componentes que você incluiu diretamente no kernel é a geração do arquivo initrd, que inclui os módulos necessários durante o início do boot que não foram
compilados no executável principal.

Para gerá-lo, você precisa do “mkinitramfs”, que faz parte do pacote “initramfs-tools”. Ele substituiu o Yaird, usado em distribuições anteriores e pode ser instalado usando o gerenciador de pacotes, como em:

# apt-get install initramfs-tools

Com ele instalado, você pode gerar o initrd usando o comando:

# mkinitramfs -o /boot/initrd.img-2.6.26 2.6.26

… onde o “2.6.26” é a versão do kernel que foi compilada e o “/boot/initrd.img-2.6.26” é o arquivo que será gerado. É importante seguir essa nomenclatura (/boot/initrd.img-versão) ao definir o nome do arquivo, para que ele
seja encontrado pelo script de atualização do grub.

Com isso, fica faltando apenas atualizar a configuração do gerenciador de boot, o que pode ser feito automaticamente rodando o:

# update-grub

Você pode também fazer a configuração manualmente, adicionando uma nova seção no arquivo “/boot/grub/menu.lst”, indicando a localização do executável do novo kernel e (caso usado) do arquivo initrd, como em:

title Kernel 2.6.26
root (hd0,2)
kernel /boot/vmlinuz-2.6.26 root=/dev/sda3 ro quiet
initrd /boot/initrd.img-2.6.26

Não remova a seção referente ao kernel antigo, pois você pode ainda precisar dele em caso de problemas de boot com o novo. Como a configuração do kernel inclui um volume muito grande de opções, é muito fácil desativar alguma
função essencial (como o suporte à controladora SATA da placa-mãe, por exemplo, onde o HD está instalado) e ficar assim com um kernel inoperante. Nesses casos, basta reiniciar usando o kernel antigo e tentar novamente.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X