Como compilar o kernel Linux 2.6.31.1

Este artigo contém informações de como instalar/configurar (no linguajar técnico conhecido como "compilar") a mais nova versão estável do kernel Linux para computadores baseados na arquitetura Intel-x86 (i386), no sistema operacional Debian GNU/Linux versão 5.0.3 codinome Lenny.

[ Hits: 31.424 ]

Por: Eder S. G. em 09/10/2009 | Blog: http://edersg.wordpress.com


Compilando o kernel Linux 2.6.31.1



1. Logo após o arquivo referente ao kernel Linux 2.6.31.1 ter sido totalmente copiado para o seu computador, desconecte da Internet e efetue logon com o super-usuário (root);

2. Estando logado como root, verifique se o prompt de comando está parecido com uma das duas opções abaixo:

[root@chicago /]#

Ou

chicago:~#

3. Acesse o diretório onde você salvou o arquivo "linux-2.6.31.1.tar.bz2".

# cd /diretorio-onde-esta-o-arquivo

4. Mova o arquivo "linux-2.6.31.1.tar.bz2" para o diretório "/usr/src":

# mv linux-2.6.31.1.tar.bz2 /usr/src

5. Vamos acessar o diretório "/usr/src":

# cd /usr/src

6. Antes de iniciar o processo de compilação do kernel Linux, é necessário descompactar o arquivo "linux-2.6.31.1.tar.bz" com o comando:

# tar -xvf linux-2.6.31.1.tar.bz2

7. Note que será criado o diretório "linux-2.6.31.1" onde estão armazenados os arquivos e diretórios referentes ao código fonte do kernel Linux 2.6.31.1:

# ls
linux-2.6.31.1   linux-2.6.31.1.tar.bz2   linux-source-2.6.26.tar.bz2

8. Apenas como precaução, vamos alterar o dono e o grupo de todos os arquivos e diretórios que estão dentro do diretório "/usr/src/linux-2.6.31.1" digitando o comando:

# chown root.root -R -v /usr/src/linux-2.6.31.1/*

9. As configurações atuais do kernel Linux que foi instalado com o Debian GNU/Linux 5.0.3 codinome Lenny estão armazenadas no arquivo "/boot/config-2.6.26-2-686". Irei utilizá-las como base para compilar o kernel Linux 2.6.31.1. Para isso, digitei o comando:

# cp /boot/config-2.6.26-2-686 /usr/src/linux-2.6.31.1/.config

10. OK, vamos em frente. Acesse o diretório 'linux-2.6.31.1':

# cd linux-2.6.31.1

11. Vamos iniciar o processo de compilação do kernel Linux 2.6.31.1. Devemos, primeiramente, configurar/selecionar as opções que queremos compilar/instalar através de um menu. Para isso, digite o comando:

# make menuconfig

12. Na tela que surgir, selecione a opção "Load an Alternate Configuration File", isto é, "Ler um arquivo de configuração alternativo" e tecle "ENTER". Utilizei o arquivo ".config" como base para acrescentar e remover algumas opções para o kernel Linux 2.6.31.1. Caso tenha dúvidas, por favor, veja o passo número 5.9. Então digite o nome do arquivo ".config" e tecle "ENTER".

A partir deste momento você poderá acrescentar ou remover algumas opções referentes ao hardware utilizado pelo seu computador. O significado dos caracteres especiais utilizados para acrescentar ou remover as opções que posteriormente serão compiladas são:
  • [ * ] = compilado dentro do kernel Linux por padrão;
  • [ ] = não compilado;
  • < M > = compilado como módulo;
  • < * > = compilado dentro do kernel Linux;
  • < > = não compilado.

Quando se tem opções como colchetes [ ], você tem duas opções:
  1. compilar dentro do kernel Linux por padrão
  2. não compilar

Já quando se tem opções como < >, você pode:
  1. compilar como módulo
  2. compilar dentro do kernel Linux
  3. não compilar

13. Infelizmente, por motivo de falta de tempo, não pude acrescentar neste tutorial as opções referentes aos diversos drivers de dispositivos que a versão 2.6.31.1 do kernel Linux oferece. Então ficará por sua conta selecionar essas opções observando a configuração do seu computador, ou seja, o seu hardware (modelo da placa de som, modelo da placa de vídeo, modelo da placa de rede, dispositivos USB, firmware, sistemas de arquivos, tipo do processador etc).

14. Logo após selecionar/marcar os itens que serão compilados, selecione a opção "Save an Alternative Configuration File", isto é, "Salvar um arquivo de configuração alternativo" para salvar as modificações que você realizou na configuração do kernel Linux 2.6.31.1. Depois de teclar "ENTER", digite um nome para o arquivo como, por exemplo, "config-nova-configuracao-do-kernel.txt".

15. Por fim, selecione a opção "Exit" (Sair) e tecle "ENTER".

16. Na tela que surgir, "Do you wish to save your new kernel configuration?" (Você deseja salvar sua nova configuração do kernel Linux?), selecione a opção "Yes" e tecle "ENTER".

17. Estando no prompt de comando, digite:

# make-kpkg clean

O comando "make-kpkg clean" é utilizado para limpar construções anteriores do kernel Linux.

18. Para criar um arquivo/pacote DEB com o kernel Linux 2.6.31.1 compilado, digite o comando:

# make-kpkg --append-to-version "-VERSAO_TAL" --initrd kernel_image

Altere o texto "VERSAO_TAL" para um nome familiar. EX: -teste01. Aguarde... esse procedimento demorará alguns minutos.

19. Caso o comando "make-kpkg" tenha parado/terminado com a seguinte mensagem:

(...)
cc -m32 -Wall -Wmissing-declarations -Wmissing-prototypes
-O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE
lguest.c -o lguest
lguest.c:21:25: error: sys/eventfd.h: No such file or directory
lguest.c: In function 'create_thread':
lguest.c:1021: warning: implicit declaration of function 'eventfd'
make: *** [lguest] Error 1

Você deverá alterar o arquivo "/usr/src/linux-2.6.31.1/Documentation/lguest/Makefile". Altere a linha:

all: lguest

Para:

all:

20. Rode/execute novamente o comando:

# make-kpkg --append-to-version "-VERSAO_TAL" --initrd kernel_image

Altere o texto "VERSAO_TAL" para um nome familiar. EX: -teste01. Aguarde... esse procedimento demorará alguns minutos. No final do processo de compilação do kernel Linux 2.6.31.1 você deverá visualizar as seguintes informações:

(...)
dpkg --build       /usr/src/linux-2.6.31.1/debian/linux-image-2.6.31.1 ..
dpkg-deb: building package `linux-image-2.6.31.1' in `../linux-image-2.6.31.1_teste.1.0_i386.deb'.
make[2]: Leaving directory `/usr/src/linux-2.6.31.1'
make[1]: Leaving directory `/usr/src/linux-2.6.31.1'

21. Repare na terceira linha de baixo para cima:

dpkg-deb: building package `linux-image-2.6.31.1' in `../linux-image-2.6.31.1_teste.1.0_i386.deb'.

Ou seja, após compilar o kernel Linux, foi gerado o arquivo chamado "linux-image-2.6.31.1_teste.1.0_i386.deb" no diretório superior "..". Assim, digite o comando:

# cd ..

22. Então para instalar o kernel Linux versão 2.6.31.1, digite o comando:

# dpkg -i linux-image-2.6.31.1_teste.1.0_i386.deb

Caso o kernel Linux versão 2.6.31.1 seja instalado com sucesso, você verá as seguintes informações:

Selecting previously deselected package linux-image-2.6.31.1.
(Reading database ... 210162 files and directories currently installed.)
Unpacking linux-image-2.6.31.1 (from linux-image-2.6.31.1_teste.1.0_i386.deb) ...
Done.
Setting up linux-image-2.6.31.1 (teste.1.0) ...
Running depmod.
Running postinst hook script update-grub.
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.31.1
Found kernel: /boot/vmlinuz-2.6.26-2-686
Updating /boot/grub/menu.lst ... done

23. Por fim, vamos reiniciar o computador digitando:

# sync
# shutdown -r now


24. Pronto! Agora, quando aparecer o menu do GRUB, selecione a opção:

Debian GNU/Linux, kernel 2.6.31.1-VERSAL_TAL

25. Caso apareça alguma mensagem de erro durante a inicialização/boot do sistema operacional Debian GNU/Linux 5.0.3 codinome Lenny utilizando o kernel 2.6.31.1, reinicie o computador e acesse o sistema através do kernel antigo selecionando a seguinte opção:

Debian GNU/Linux, kernel 2.6.26-2-686

Caso o Debian GNU/Linux trave durante a inicialização do novo kernel 2.6.31.1 com a seguinte mensagem de erro:

Begin: Waiting for root file system ...

Você deverá optar em realizar um dos dois procedimentos abaixo:

1° procedimento: segundo o site kernelnewbies, a partir da versão 2.6.19 do kernel Linux o suporte a dispositivos que utilizam a interface IDE (como, por exemplo, disco rígidos, drives de CD-ROM ou DVD-ROM) serão acessados, por padrão, pelo Debian GNU/Linux através de uma nova nomenclatura:

/dev/sda
/dev/sdb
/dev/sdc
/dev/sdd

Ao invés de:

/dev/hda (periférico configurado como MASTER na IDE primária)
/dev/hdb (periférico configurado como SLAVE na IDE primária)
/dev/hdc (periférico configurado como MASTER na IDE secundária)
/dev/hdd (periférico configurado como SLAVE na IDE secundária)

Esse recurso está selecionado na configuração do kernel Linux 2.6.31.1 na opção "Serial ATA (prod) and Parallel ATA (experimental) drivers" dentro do menu "Device Drivers". Caso queira realmente utilizar esse novo recurso, você deverá alterar os seguintes arquivos:

Arquivo /etc/fstab:

(...)
# Editado por Eder Jordan - 04/10/2009
# /dev/hda2     /      ext3   (...)
/dev/sda2       /      ext3   (...)
#
# Editado por Eder Jordan - 04/10/2009
# /dev/hda4     /home     ext3   (...)
/dev/sda4       /home     ext3   (...)
#
# Editado por Eder Jordan - 04/10/2009
# /dev/hda3     none      swap   (...)
/dev/sda3       none      swap   (...)
#
# Editado por Eder Jordan - 04/10/2009
# /dev/hdc     /media/cdrom0   udf,iso9660   (...)
/dev/sdc       /media/cdrom0   udf,iso9660
(...)

Arquivo /boot/grub/menu.lst:

(...)
## ## End Default Options ##

title     Debian GNU/Linux 5.0.3 - Lenny - Kernel 2.6.31.1
root      (hd0,1)
kernel    /boot/vmlinuz-2.6.31.1-ej23mj root=/dev/sda2 ro quiet
initrd    /boot/initrd.img-2.6.31.1-ej23mj

title     Debian GNU/Linux 5.0.3 - Lenny - Kernel 2.6.31.1 (single-user mode)
root      (hd0,1)
kernel    /boot/vmlinuz-2.6.31.1-ej23mj root=/dev/sda2 ro single
initrd    /boot/initrd.img-2.6.31.1-ej23mj

title     Debian GNU/Linux 5.0.3 - Lenny - Kernel 2.6.26-2-686
root      (hd0,1)
kernel    /boot/vmlinuz-2.6.26-2-686 root=/dev/hda2 ro quiet
initrd    /boot/initrd.img-2.6.26-2-686

title     Debian GNU/Linux 5.0.3 - Lenny - Kernel 2.6.26-2-686 (single-user mode)
root      (hd0,1)
kernel    /boot/vmlinuz-2.6.26-2-686 root=/dev/hda2 ro single
initrd    /boot/initrd.img-2.6.26-2-686

(...)

2° procedimento: também, segundo o site kernelnewbies:

"Well, the safe option is using the old driver: The old drivers will continue working just as they did before. There'll be no changes if you continue using the old drivers."

Tradução amadora: Bem, a opção segura é utilizar o driver antigo: ele continuará funcionando da mesma maneira que que fazia antes. Não haverá mudanças se você continuar usando o driver antigo.

E mais:

"If you want to be safe, use the old drivers."

Tradução amadora: Se você deseja estar seguro, utilize o driver antigo.

O driver antigo configurará o suporte a dispositivos que utilizam a interface IDE (como, por exemplo, disco rígidos, drives de CD-ROM ou DVD-ROM) através da mesma nomenclatura anterior à versões do kernel Linux 2.6.19, ou seja, 2.6.18, 2.6.17, 2.6.16 etc. Sua nomenclatura não altera, isto é:

/dev/hda (periférico configurado como MASTER na IDE primária)
/dev/hdb (periférico configurado como SLAVE na IDE primária)
/dev/hdc (periférico configurado como MASTER na IDE secundária)
/dev/hdd (periférico configurado como SLAVE na IDE secundária)

Optei por utilizar o 2° procedimento. Para isso, na configuração do kernel Linux 2.6.31.1 , selecionei a opção "ATA/ATAPI/MFM/RLL support", dentro do menu "Device drivers e desmarquei a opção referente ao novo driver, "Serial ATA (prod) and Parallel ATA (experimental) drivers" dentro do menu "Device Drivers". Assim não será necessário alterar os arquivos /etc/fstab e /boot/grub/menu.lst como no 1° procedimento.

Página anterior     Próxima página

Páginas do artigo
   1. Resumo
   2. Antes de começar: observações
   3. Compilando o kernel Linux 2.6.31.1
   4. Bibliografia e sobre o autor
Outros artigos deste autor

Como personalizar o prompt do shell bash

Como instalar o software p2p XMule no Red Hat Linux 9

Como instalar o compilador Free Pascal

Guia: Pós-instalação do Debian Linux 4.0 Etch/Stable

Como instalar/configurar e rodar aplicativos Java sob o Red Hat Linux 9

Leitura recomendada

Debian Linux: Atualizando o kernel 2.6.24 para 2.6.26.3 (versão estável)

Compilando o Kernel do OpenBSD 4.3 (GENERIC)

Compilando o kernel 2.6.13 no Slackware 10.2

Kernel atualizado no Debian - Parte II

Compilando ou atualizando um kernel Linux

  
Comentários
[1] Comentário enviado por predator em 09/10/2009 - 16:13h

Em sistemas Debian o kernel tambem pode ser atualizado da seguinte maneira: pelo apt-get

Insira essas linhas no seu sources.list

deb http://ftp.de.debian.org/debian/ sid main
deb-src http://ftp.de.debian.org/debian/ sid main

rode o
#apt-get update ou aptitude update
depois
#apt-cache search linux-image
ira aparecer uma lista com os kernel's disponiveis, escolha o compativel com a sua arquitetura, e instale com o comando

#apt-get install linux-image-2.6.30.-2-686 (exemplo)

depois comente, (ou apague) essas linhas novamente

#deb http://ftp.de.debian.org/debian/ sid main
#deb-src http://ftp.de.debian.org/debian/ sid main

muito simples




[2] Comentário enviado por infog em 09/10/2009 - 18:12h

predator,

Cara, assim você está adicionando os repositórios do Debian unstable na sua distro e o apt vai querer atualizar todos os pacotes assim que você fizer um safe-upgrade.
Não recomendo fazer o que você disse, a não ser que se retirem as linhas referentes ao unstable logo após a instalação.

InFog

[3] Comentário enviado por removido em 09/10/2009 - 19:22h

Caro Eder,

Acredito que quem conheça as vantagens do Linux 2.6.31 e usuário do Debian é plenamente capaz de compilar o kernel a partir da fonte. Acredito que o seu texto seria muito mais proveitoso se enumerasse motivos para atualizar para esta nova versão ao invés de "mais do mesmo": Você já contou quantos artigos existem aqui mesmo no VOL sobre compilação do kernel com o kernel package do Debian?

Que vantagens você encontrou nesta compilação?

Abraços

Piero

[4] Comentário enviado por predator em 09/10/2009 - 19:35h

infog,

obrigado por corrigir...

já alterei o comentário.

abs

[5] Comentário enviado por megatux em 10/10/2009 - 09:25h

Bom dia !

Eder, também concordo com o bpiero. Pra quem entende a necessidade de se compilar um novo kernel, achei seu texto muito pesado. Se o cara que está compilado um kernel não souber nem como reiniciar a máquina, pra que compilar um kernel ?
Por outro lado, acredito que é uma boa referência para um usuário um iniciante, pois além de você mostrar como compilar o kernel, você também apresentou possiveis problemas que possam vir a ocorrer.

Uma pequena correção:
Na hora de desempacotar o novo kernel, substitua o
#tar -xvf
por
#tar jxvf

visto que se trata de um pacote bzip e não gzip.

Grande abraço !

:wq!

[6] Comentário enviado por cleysinhonv em 10/10/2009 - 19:33h

Olá,

Bom seu artigo está bom, mas gostaria de fazer uma observação:

1) Poderia falar a respeito dos driveres, eu estava ate enteressado em fazer o teste mesmo sendo de minha responsabilidade, mas quando disse a respeito dos driveres desanimei.

2) Faltou um pouco de "clareza" para me dixar confiante.

Mas isso não tira os seus meritos e sua contribuição né!

Um abraço

[7] Comentário enviado por dwdu em 10/10/2009 - 20:53h

Quebrei o silencio.
Hehe!

Prezado, Eder Jordan

Vi em seu artigo, algo que, por ventura, animasse aos iniciantes a recompilar o kernel.

Parabéns pelo artigo, intuitivo.






[8] Comentário enviado por edersg em 10/10/2009 - 21:50h

Boa noite a todos da comunidade Viva o Linux!

Como vocês estão? Espero que estejam a cada dia melhor!

Muito obrigado pelos sugestões, dicas e pelas críticas construtivas.

No mais, tenham todos um excelente domingo!

FÉ, SAÚDE e PAZ!

Atenciosamente,

Eder Jordan.


[9] Comentário enviado por adrianoc em 13/10/2009 - 11:15h

Achei fantástico e muito fácil, vou estar testando.

Obrigado.

[10] Comentário enviado por DebianWoman em 28/10/2009 - 07:32h

Meu querido colega, já tentei várias vezes compilar e recompilar kernel, mas toda vez faço "m..." e acaba dando kernel panic...

[11] Comentário enviado por DebianWoman em 28/10/2009 - 09:40h

Erro sendo apresentado:

root@teste:/usr/src/linux-2.6.31.1# make menuconfig
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: ** [scripts/kconfig/dochecklxdialog] Erro 1
make: ** [menuconfig] Erro 2

[12] Comentário enviado por albfneto em 10/11/2009 - 14:52h

eu gostei, não é sempre que é preciso compilar, mas este é um procedimento muito detalhado, inclusive trocar as permissões

[13] Comentário enviado por gpr.ppg.br em 18/07/2010 - 10:31h


estou compilando o kernel
mas estou com uma duvida.

# make menuconfig
O configurador com
os parâmetros do kernel surgirá:

na parte de escolher o processador
tem uma lista
mas o meu não aparece.

tenho dois processadores
são eles:
turion64
turion64 x2

qual seria os relativos
na relação do kernel
que devo escolher?


antecipadamente agradeço,
gpr.


[14] Comentário enviado por wpereiratecno em 17/11/2010 - 09:36h

Eder,

Você está de parabéns! Segui seu roteiro e consegui recompilar o kernel do meu GNU/Linux, da 2.6.26 para 2.6.36 (stable).

Muito sucesso para você!

Abraços,

Wagner Pereira

[15] Comentário enviado por wpereiratecno em 17/11/2010 - 10:05h

Pessoal,

Creio que algo que precisa ser considerado quando se decide atualizar o kernel do GNU/Linux é que, desse jeito, perde-se a funcionalidade de atualizações de segurança do sistema operacional.

Isto significa que, atualizando o kernel "na mão", não adianta executar depois apt-get update/upgrade que o sistema não terá suas eventuais falhas corrigidas automaticamente.

Se eu estiver errado, sintam-se à vontade para me corrigir.

Att,

Wagner Pereira


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts