Recompilando kernel 2.6 no Debian Lenny

Este trabalho tem como objetivo mostrar aos usuários como é simples recompilar um kernel, graças à grande evolução dos sistemas Linux e ao grande esforço da comunidade. Espero que este artigo ajude quem ainda não recompilou um kernel e acha que é um bicho de sete cabeças.

[ Hits: 18.057 ]

Por: Carlos em 05/08/2009 | Blog: http://lattes.cnpq.br/2631598131280012


Comandos úteis para a verificação do hardware



Geralmente a recompilação de um kernel é realizada com a intenção de melhorar o desempenho do sistema, adaptando-o de acordo com as suas necessidades, livrar-se de bugs, dar suporte a algum dispositivo ou até mesmo por curiosidade.

O primeiro passo para se obter um bom resultado na recompilação de um kernel é conhecer bem o seu hardware, pois se for inserido muita coisa o carregamento do kernel aumentará, portanto, devemos adicionar apenas o que será usado, desabilitando o que não for útil e o restante compilado como módulo. Os módulos serão carregados somente quando forem usados. Existem alguns comandos que podem lhe ajudar a se informar sobre o seu hardware:

lspci

Lista alguns dos dispositivos utilizados.

cat /proc/cpuinfo

Lista algumas informações sobre o processador.

cat /proc/meminfo

Lista informações sobre a memória RAM.

Obtendo os fontes e pacotes necessários

O primeiro passo é obter o código-fonte da versão escolhida, link indicado:
Copie o arquivo baixado para o diretório /usr/src:

# cp localdoarquivo /usr/src

Descompacte o arquivo:

# tar -zxvf linux-2.6.x.tar.gz

(o "x" deve ser substituído pela versão escolhida)

Se o arquivo estiver com a extensão tar.bz2, execute:

# tar -jxvf linux-2.6.x.tar.bz2

Crie um link que indicará a localização do código-fonte do novo kernel:

# ln -s /usr/src/linux-2.6.x /usr/src/linux

Acesse o diretório raiz de compilação:

# cd /usr/src/linux-2.6.x

Antes de iniciar a compilação é necessário ter alguns softwares instalados, execute o script "ver_linux", que mostrará os softwares instalados, localizado dentro do diretório /usr/src/linux-2.6.x/scripts, com o comando:

# sh /usr/src/linux-2.6.x/scripts/ver_linux

Compare esta lista com a lista oferecida no diretório /usr/src/linux-2.6.x/Documentation/changes, nem todos os softwares da lista precisam estar instalados, mas é necessário instalar o máximo possível.

Quando compilei o kernel linux-2.6.30.4, tinha esses softwares instalados:

Gnu C                  4.3.2
Gnu make               3.81
binutils               2.18.0.20080103
util-linux             2.13.1.1
mount                  2.13.1.1
module-init-tools      3.4
e2fsprogs              1.41.3
jfsutils               1.1.12
reiserfsprogs          3.6.19
xfsprogs               2.9.8
pcmciautils            014
quota-tools            3.16.
PPP                    2.4.4
Linux C Library        2.7
Dynamic linker (ldd)   2.7
Procps                 3.2.7
Net-tools              1.60
Console-tools          0.2.3
oprofile               0.9.3
Sh-utils               6.10
udev                   125
wireless-tools         29

E esta era a lista "Changes":

Gnu C                  3.2                     
Gnu make               3.79.1           
binutils               2.12                 
util-linux             2.10o               
module-init-tools      0.9.10          
e2fsprogs              1.41.4            
jfsutils               1.1.3                
reiserfsprogs          3.6.3            
xfsprogs               2.6.0              
squashfs-tools         4.0              
btrfs-progs            0.18             
pcmciautils            004             
quota-tools            3.09             
PPP                    2.4.0              
isdn4k-utils           3.1pre1       
nfs-utils              1.0.5             
procps                 3.2.0            
oprofile               0.9               
udev                   081              
grub                   0.93             

A maioria dos softwares não instalados podem ser instalados via "apt-get".

Para a realização da compilação é necessário instalar o pacote kernel-package, que pode ser instalado com comando:

# apt-get install kernel-package

É necessário também instalar os pacotes "gcc" e "g++":

# apt-get install gcc g++

    Próxima página

Páginas do artigo
   1. Comandos úteis para a verificação do hardware
   2. Configurando e compilando
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Compilando kernel no Debian Squeeze

Compilação do Kernel

Compilando Kernel no CentOS 6.0

Kernel 2.6.9 no Slackware

NetFilter Hook em Kernel 2.6

  
Comentários
[1] Comentário enviado por removido em 05/08/2009 - 14:46h

# make-kpkg --append-to-version "-apelido" --initrd --us --uc kernel_image kernel_source

--append-to-version "-apelido" : Colocarã ao final do pacote, um nome que vc especificar dentro das aspas duplas. Pode botar seu nome aqui..hehehehhehehehe
--initrd : Diz que vc quer um initial ramdisk, junto da compilação do Kernel
--us --uc : Não cria changelog nem assinatura, para este pacote

kernel_image = Gerar .deb do Kernel
kernel_source = Gerar .deb com o Source do Kernel

http://www.forum-invaders.com.br/phpBB/viewtopic.php?f=3&t=8551783

[2] Comentário enviado por pardalz em 05/08/2009 - 15:50h

isso é recomendavel fazer em que situação?

[3] Comentário enviado por removido em 05/08/2009 - 16:13h

>>> isso é recomendavel fazer em que situação?

Hardware não suportado(por exemplo, a minha webcam só teve suporte completo na 2.6.22), alteração do kernel para "real time" ou "low-latency", para aquela sensação de maior performance ;), e até mesmo para ter um pacote de Kernel mais "enxuto".

o .config, por exemplo do meu Kernel(específico para meu notebook), eu arranquei suporte a quase todas as placas wireless(deixando apenas a 3945 da intel), a NIC deixei apenas a e1000e, compilei para a minha família de processador específica(Core 2 e não pentium genérico). Tudo isso dá um aumento de performance, e o pacote .deb do kernel que era de 22Mb caiu para 16Mb =)

[4] Comentário enviado por carlinhojunior em 06/08/2009 - 11:03h

obrigado pelo comentário, muito interessante...

[5] Comentário enviado por pardalz em 12/08/2009 - 21:00h

ah.. o meu nao deu certo aqui nao =(

[6] Comentário enviado por carlinhojunior em 14/08/2009 - 12:33h

pardalz

o que aconteceu?

posta aí que tento te ajudar...

[7] Comentário enviado por (xinelo) em 06/10/2009 - 21:34h

Estou usando o Debian Lenny, segui o passo a passo que vc recomendou mas deu um erro aqui:

make[1]: Saindo do diretório `/usr/src/linux-2.6.30.8'
/usr/bin/make ARCH=i386 \
-C Documentation/lguest
make[1]: Entrando no diretório `/usr/src/linux-2.6.30.8/Documentation/lguest'
cc -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE lguest.c -lz -o lguest
lguest.c:34:18: error: zlib.h: Arquivo ou diretório não encontrado
make[1]: ** [lguest] Erro 1
make[1]: Saindo do diretório `/usr/src/linux-2.6.30.8/Documentation/lguest'
make: ** [debian/stamp/build/kernel] Erro 2

[8] Comentário enviado por (xinelo) em 07/10/2009 - 22:07h

Já deu certo .. foi só instalar o pacote zlib1g-dev.

http://www.vivaolinux.com.br/topico/Debian/Erro-ao-compilar-o-Kernel-1

Bom artigo, parabéns!

[9] Comentário enviado por carlinhojunior em 10/10/2009 - 09:47h

Obrigado

e me desculpa faz dias que não acesso o VOL por falta de tempo...mais que bom que deu certo...

qualquer coisa posta aí...

[10] Comentário enviado por GustavinhoO em 28/09/2011 - 17:12h

consegui executar make menuselect make clean...

mas quando executei make-kpkg --initrd kernel_image

deu esse erro aki:


from arch/i386/kernel/process.c:17:
include/asm/mpspec_def.h:78: warning: âpackedâ attribute ignored for field of ty pe âunsigned char[6]â
arch/i386/kernel/process.c: In function âshow_regsâ:
arch/i386/kernel/process.c:252: warning: pointer targets in passing argument 2 o f âshow_traceâ differ in signedness
include/asm/processor.h:498: note: expected âlong unsigned int *â but argument i s of type âlong int *â
arch/i386/kernel/process.c: Assembler messages:
arch/i386/kernel/process.c:378: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:379: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:455: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:456: Error: operand type mismatch for `mov'
include/linux/elfcore.h:92: Error: operand type mismatch for `mov'
include/linux/elfcore.h:92: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:577: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:578: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:585: Error: operand type mismatch for `mov'
arch/i386/kernel/process.c:586: Error: operand type mismatch for `mov'
make[2]: *** [arch/i386/kernel/process.o] Error 1
make[1]: *** [arch/i386/kernel] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.9'
make: *** [debian/stamp/build/kernel] Error 2

alguem pode me ajudar....


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts