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.060 ]

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

Aventuras e desventuras com o kernel 2.6

Compilando o kernel no Conectiva Linux 10

Compilando kernel com suporte a POM (path-omatic) e Layer7 no Debian e Slackware

Compilando Kernel 2.6.34 usando Debian Lenny

KernelCheck - Instalando o kernel mais recente em distros Debian-like e outras

  
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