Compilação do kernel v3.x no CentOS e Debian

Vou descrever nesse artigo, como compilar o kernel v3.x na "unha" usando o CentOS e o Debian.

[ Hits: 56.988 ]

Por: Fabricio Santana em 06/10/2014


Compilação do kernel v3.x



Introdução

A versão 3 do kernel, foi lançada em 22 de Julho de 2011 em comemoração aos 20 anos do Linux, com alterações bastante técnicas incluindo suporte a mais dispositivos, redução na fragmentação no sistema de arquivos Btrfs e um backend de armazenamento para o Xen.

Outras mudanças aparecem como suporte mais amplo a placas de rede Wireless, WebCams, etc.

Configurar, compilar e instalar o kernel

Nesse artigo, utilizei o Debian 7 e o CentOS 6.5, ambos 32 bits.

Antes de compilar qualquer versão do kernel, comece instalando os pacotes abaixo para resolver as dependências durante a compilação:

No Debian:

# aptitude install make gcc g++ autoconf libncurses5 libncurses5-dev ncurses-base ncurses-bin ncurses-term initramfs-tools

No CentOS:

# yum install ncurses-devel
# yum groupinstall "Development Tools"

Obs.: se estiver usando o CentOS minimal, use o seguinte comando:

# yum groupinstall "Base"

Assim, ele vai instalar diversas ferramentas que serão necessárias para o uso do sistema.

O próximo passo, é obter o código fonte do kernel a partir do site:
No momento que escrevo o artigo, a versão estável é a 3.16.3.

Vamos acessar o diretório /usr/src para baixar a fonte do kernel, isso se for respeitar a FHS:

# cd /usr/src/

Vamos realizar o download com o comando wget:

# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.3.tar.xz

Agora, vamos descompactar o arquivo baixado:

# tar -Jxf linux-3.16.3.tar.xz

Vamos criar um link simbólico para manter uma organização:

# ln -s /usr/src/linux-3.16.3 /usr/src/linux
# cd linux

Agora, vamos adicionar uma EXTRAVERSION, a fim de organizar uma eventual estrutura de módulos no /lib.

Para gerar uma string de extraversion, vamos usar o comando date:

# date +"-%Y%m%dc1"
-20141002c1

Vamos adiciona-la no Makefile do kernel:

# cd /usr/src/linux-3.16.3
# vim Makefile

EXTRAVERSION = -20141002c1

Vamos compilar o kernel utilizando o make menuconfig. Essa opção usa a interface ncurses.

Antes de começar a compilar o kernel, vamos dar uma limpeza no diretório do fonte do kernel:

# make mrproper

Depois disso, vamos iniciar o processo de configuração:

# make menuconfig

Nesta parte, pode-se escolher o processador correto, quais módulos desejamos adicionar ou remover, se deseja colocar o logo do Tux para iniciar junto ao sistema, etc.

Não vou fazer nenhuma alteração nele, pois irei apenas atualizar o kernel do sistema. Após salvar as configurações na opção Save, vamos salvar o arquivo gerado em local seguro:

# cp .config /boot/config-3.16.3-20141002c1

Agora, vamos começar a compilar o kernel:

# make CONFIG_DEBUG_SELECTION_MISMATCH=y

Obs.: caso o seu processador possua mais de um núcleo, use a flag -j para acelerar a compilação, por exemplo:

# make CONFIG_DEBUG_SELECTION_MISMATCH=y -j2

Isso, se o processador for de 2 núcleos, se for 4, use -j4.

Agora pode descansar um pouco, pois isso é bem demorado...

Após acabar o processo, vamos copiar os módulos para o diretório apropriado em lib/modules:

# make modules
# make modules_install

Depois disso, será gerado um arquivo de imagem, o bzImage, dentro do diretório /usr/src/linux3.16.3/arch/XXX/boot.

Onde XXX, é a arquitetura do seu processador.

Copie para o diretório /boot, com o nome vmlinuz (este é o nome dado ao kernel):

# cd arch/i386/boot
# file bzImage
# cp bzImage /boot/vmlinuz-3.16.3-20141002c1

Vamos criar uma image de boot, pois ela é necessária para que os módulos sejam carregados durante o boot.

Vamos construir o arquivo initrd em /boot.

No Debian:

# mkinitramfs -o /boot/initrd.img-3.16.3-20141002c1 /lib/modules/3.16.3-20141002c1

No CentOS:

# mkinitrd /boot/initrd-3.16.3-20141002c1.img /lib/modules/3.16.3-20141002c1

Agora, vamos finalizar configurando o bootloader:

# update-grub

Se já estiver com o GRUB 2 instalado, a configuração será feita de forma automática, basta reiniciar e usar o novo kernel.

Depois de reiniciar, basta verificar a nova versão do kernel com o comando:

# uname -r


Fim.

   

Páginas do artigo
   1. Compilação do kernel v3.x
Outros artigos deste autor

Kernel 4.0 no Debian, Linux Mint e Ubuntu - Atualização rápida

Antergos - Um caminho para conhecer o Arch Linux

Servidor NTP - Configuração e ajuste de data e hora

Instalação do Deepin 14.1 - Uma distribuição fantástica

Leitura recomendada

OpeniBoot - Seu iPhone com Linux!

Instalando o Slackware com suporte HT - SMP

Como instalar o bootsplash no Debian 3.1 Sarge a partir do zero

Experimento com Linux: Misturando Sabayon com Gentoo

Recompilando o Kernel no Ubuntu Linux 9.04

  
Comentários
[1] Comentário enviado por wagnerfs em 07/10/2014 - 21:18h

Muito bom o artigo e obrigado por compartilhar o conhecimento

[2] Comentário enviado por gpxlnx em 12/10/2014 - 10:36h

Excelente aritgo, uma outra dica interessante seria utilizar o lsmod para listar os modulos do kernel antigo para nao faltar nada e buscar o nome dos modulos no menuconfig através da teclad /.

Caso compile esse kernel com algo faltando como devo proceder para remover o mesmo e também qualquer arquivo referente a esta compilação como modulos?

Att.,

[3] Comentário enviado por atem em 05/11/2014 - 10:05h

Bom dia,

Segui o passo a passo, entretanto utilizo o CentOS 6.4 x86_64, sigo o mesmo passo a passo?

Eu tenho uma placa de rede Wifi Realtek 8192se e estou atualizando o kernel porque não consigo compilar o driver, e vou ver se após a atualização conseguirei.

[4] Comentário enviado por atem em 05/11/2014 - 10:19h

Tentei fazer a atualização e no momento que rodo o comando mkinitrd /boot/initr-3.16.3.img /lib/modules/3.16.3/ apresenta o erro

find: `/lib/modules//lib/modules/3.16.3/': Arquivo ou diretório não encontrado
find: `/lib/modules//lib/modules/3.16.3/': Arquivo ou diretório não encontrado
find: `/lib/modules//lib/modules/3.16.3/': Arquivo ou diretório não encontrado
find: `/lib/modules//lib/modules/3.16.3/': Arquivo ou diretório não encontrado
find: `/lib/modules//lib/modules/3.16.3/': Arquivo ou diretório não encontrado

[5] Comentário enviado por atem em 05/11/2014 - 10:21h

Bom, executei o comando dentro do diretório /lib/modules/

Pois pelo que entendi no erro acima, ele procurava o diretório lib/modules e depois procurava denovo.

quando executei dentro do /lib/modules/ "mkinitrd /boot/initr-3.16.3.img 3.16.3/

não apresentou erros, vou reiniciar e testar.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts