Compilando o Kernel 4.12.3

Home / Kernel / Compilando o Kernel 4.12.3

A pesar de ser um procedimento muito pouco necessário até para administradores experientes em Linux, é sempre bom saber compilar e instalar um novo Kernel Linux, caso necessário.

Geralmente, o que motiva a instalação de um novo Kernel é a retirada de alguns recursos desnecessários que ocupam espaço atoa na imagem do kernel e também na initrd. Em tempo: para o boot de qualquer SO que use Kernel Linux, são necessárias a imagem de boot do Kernel (vmlinuz) e também a imagem de boot dos módulos (initrd).

Vamos usar para este laboratório uma máquina virtual com o Debian9 instalado.

Instalando os pacotes necessários

#apt-get install libncurses5-dev gcc build-essential make bc -y

Baixando o código-fonte do Kernel

Neste passo, você pode fazer o download do código-fonte direto do site kernel.org. A última versão estável é sempre a recomendada para esta atividade.

#wget –no-check-certificate https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.3.tar.xz

De cara, mova o arquivo compactado para o diretório esperado para o source do Kernel:

#mv linux-4.12.3.tar.xz /usr/src/

Descompactar o source do Kernel:

#tar xvf linux-4.12.3.tar.xz

É sempre bom criar um link simbólico do diretório do kernel:

#ln -s /usr/src/linux-4.12.3 /usr/src/linux

#cd /usr/src/linux

Para tornar mais rápida a nossa tarefa, vamos copiar o arquivo config do Kernel em execução e utilizá-lo:

#cp /boot/config-$(uname -r) config

#mv config .config

O arquivo .config é gerado após o passo ‘make menuconfig’ . Dentro deste arquivo estão os recursos que vão ser implementados ou não.

#vim .config

Configurando o Kernel

IMPORTANTE: a data do sistema deve estar atualizada, caso contrário a compilação pode ficar incompleta.

#apt-get install ntpdate

#ntpdate br.pool.ntp.org

#make menuconfig

Carregando o arquivo .config:

A partir daí, o administrador pode escolher os recursos à vontade navegando pelos menus.

Os recursos com M serão instalados como modulares (em módulos adicionais do Kernel) enquanto os recursos marcados como ‘*’ serão instalados como ‘built-in’ (inseridos na imagem do Kernel).

Salve as configurações e saia do Menu.

Resolvendo as dependências de compilação:

#make dep

Removendo arquivos de compilações anteriores:

#make clean

Construindo a imagem do Kernel:

#make bzImage

Compilando os módulos:

#make modules

Instalando os módulos:

#make modules_install

É neste passo que os módulos, já compilados, são copiados para /lib/modules/<versão do kernel>.

Vamos lá criar agora a initrd, imagem de boot dos módulos do kernel:

#cd /lib/modules/

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

Vamos agora copiar a imagem de boot do Kernel para o diretório /boot:

#cd /usr/src/linux/arch/x86_64/boot

#cp bzImage /boot/vmlinuz-4.12.3

#ls -lh /boot

Atualizando o GRUB2 e dando reboot no sistema:

#update-grub2

#shutdown -r now

Indo em ‘Opções avançadas’, lá vai estar a primeira opção de boot já pelo Kernel novo.

Agora é só iniciar com o kernel desejado e utilizá-lo.

Conferindo, já com o kernel novo em execução:

IMPORTANTE: quanto maior for o tamanho da initrd maior terá que ser o espaço reservado em RAM para que ela possa ser inicializada. Caso não tenha memória suficiente para ela, o resultado é o famoso Kernel Panic.

Grande abraço e até a próxima!

2 Comments

    • bruno.odon

      Que bom que gostou, Ettore!
      Sim, eu já compilei no Debian8 (Jessie) e também fluiu tranquilamente. O que tem que sempre ser observado é o tamanho da memória RAM disponível, que deve ser superior ao tamanho da INITRD, pois a mesma vai sempre utilizar a RAM para o boot.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *