Como compilar o kernel 2.6

Neste artigo vou ensinar a compilar o kernel do linux da versão 2.6.x e mostrar as diferenças desta versão para a anterior, 2.4.x.

Compilar o kernel do linux é uma tarefa que se aprende com o tempo, depois de várias tentativas. Mas os problemas geralmente se resumem à configuração e nao à compilação. Vou tentar dar umas dicas referentes ? configuração, mas lembre-se que cada maquina usa uma configuração diferente por isso tenha em mãos toda a configuração do seu computador e não desista na primeira tentativa.

Para compilar você vai precisar do gcc (A documentação do kernel recomenda a versão 2.95 do gcc, mas eu tenho compilado com sucesso o kernel com as versões 3.2 e 3.3 e muitas distros fazem isso também, a dica é tentar compilar com a versão mais atual do gcc, se der algum problema compile com a 2.95), do Ncurses (geralmente um pacote chamado libncurses-dev ou Ncurses-devel), do make e do module-init-tools.

Qualquer dúvida sobre os pacotes necessários para compilar o kernel, leia o arquivo /usr/src/linux/Documentation/Changes.

Vou usar como referência o kernel da versão 2.6.4 baixado do kernel.org.

Baixe o source do kernel (clique no ‘F’ ao lado da versão do kernel que você deseja baixar. O ‘F’ significa ‘Full source’). Copie o arquivo baixado para /usr/src:

[root@host] # cp linux-2.6.4.tar.bz2 /usr/src

e decompacte-o:

[root@host] # cd /usr/src

[root@host] # tar jxvf linux-2.6.4.tar.bz2

Para facilitar, crie um link simbólico para o diretório que foi criado chamado ‘linux’. Se já existir, remova e crie novamente:

[root@host] # rm /usr/src/linux

[root@host] # ln -s /usr/src/linux-2.6.4 /usr/src/linux

Como a maioria de nós vai compilar o kernel em desktop, vou usar o patch do Con Kolivas, que otimiza o kernel para operações comuns de desktop. Não é obrigatório, mas eu recomendo que use este patch, pois ele melhora bastante o desempenho.

Baixe o arquivo patch-2.6.4-ck1.bz2 e copie-o também para /usr/src

[root@host] # cp patch-2.6.4-ck1 /usr/src

descompacte-o

[root@host] # bunzip2 patch-2.6.4-ck1.bz2

e aplique o patch no source do seu kernel

[root@host] # cd /usr/src/linux

[root@host] # patch -p1 < ../patch-2.6.4-ck1

Agora vamos ? configuração. Estando em /usr/src/linux, digite

[root@host] # make mrproper

para limpar as configurações e depois

[root@host] # make menuconfig

Existem outras maneiras de configurar o kernel, inclusive em modo gráfico, mas aqui vou me referir apenas ao menuconfig.

Como disse anteriormente, esta parte depende muito da máquina em questão. É necessário que você selecione todas as opções referentes ao seu hardware e os sistemas de arquivo que você usa. No menuconfig um ‘*’ significa que a opção será compilada dentro da imagem do kernel, um ‘M’ significa que será compilado como um módulo externo.

O sistema de arquivos que a sua partição linux usa deve ser marcado como ‘*’, bem como suporte a IDE (ou SCSI se for o caso). O restante das opções podem ser escolhidas como módulo, você escolhe.

Lembre-se que se você selecionar alguma opção como módulo, deve marcar a opção

Loadable Module Support -> Enable loadable module support,

Loadable Module Support -> Module unloading

e

Loadable Module Support -> Automatic kernel module unloading.

Depois publicarei um artigo mostrando com mais detalhes a configuração.

Salve a configuração. Agora vamos compilar.

A compilação dos kernels da versão 2.6 é um pouco diferente da 2.4. Não existe mais o comando make dep e tem alguns outros alvos (make help exibe as opções disponíveis).

Vamos por partes:

A primeira coisa a fazer é criar a imagem ‘bootável’ do kernel:

[root@host] # make bzImage

Este comando pode demorar bastante tempo dependendo da máquina usada. Se a sua máquina for antiga arrume algo pra fazer pois é tedioso ficar assistindo ? compilação.

Após terminado esse comando a imagem do kernel gerada é gravada em /usr/src/linux/arch/i386/boot/bzImage

O próximo passo é compilar os módulos (aquelas opções selecionadas como ‘M’ na configuração). Se você nao selecionou nada como ‘M’ (o que não é comum), pode pular essa parte.

[root@host] # make modules

E agora instale os módulos criados:

[root@host] # make modules_install

Se você não tiver instalado o pacote module-init-tools, vai receber uma mensagem de erro ao final do make modules_install. Se isso acontecer, instale o module-init-tools pois sem ele o kernel 2.6 nao vai funcionar.

Tudo certo até aqui? Parabéns, o seu kernel está compilado. Vamos agora configurar o nosso sistema para poder ‘bootar’ este novo kernel.

Copie os arquivos de imagem, configuração e o System.map para /boot

[root@host] # cp /usr/src/linux/arch/i386/boot/bzImage
/boot/vmlinuz-2.6.4

[root@host] # cp /usr/src/linux/.config /boot/config-2.6.4

[root@host] # cp /usr/src/linux/System.map /boot/System.map-2.6.4

Vamos configurar agora o gerenciador de boot para usar esse novo kernel. É importante que você mantenha a versão antiga do kernel intocada para poder inicializar o linux em caso de erros no kernel novo.

Se você usa o LILO, edite o arquivo /etc/lilo.conf com o seu editor de textos preferido.

Saiba qual a partição onde seu linux está instalado. É algo como /dev/hdax, onde x é um número. Olhe no lilo.conf na parte referente ao outro kernel e use a mesma partição na nova configuração. Vou usar /dev/hda2 como referência:

A configuração ficará assim:

image /boot/vmlinuz-2.6.4
    root=/dev/hda2
    label=Linux-2.6.4
    read-only

Salve o arquivo e execute o comando /sbin/lilo para gravar a nova configuração

[root@host] # /sbin/lilo

Se o seu gerenciador de boot é o GRUB, edite o arquivo /boot/grub/grub.conf ou /boot/grub/menu.lst. Veja qual a partição onde seu linux está instalado. O GRUB usa uma configuração um pouco diferente, do tipo (hdx,y), onde x é a interface IDE e o y é o numero da partição. Neste caso /dev/hda2 = (hd0,1). Vou usar /dev/hda2 como exemplo mas lembre-se de trocar para a partição que você usa.

A entrada no arquivo ficará assim:

title Linux-2.6.4

root (hd0,1)

kernel /boot/vmlinuz-2.6.4 root=/dev/hda2 ro

Salve o arquivo e pronto. O GRUB nao necessita que seja rodado nenhum comando apos a alteração.

Para quem deseja usar o gcc-2.95 para compilar o kernel:

Se vc usa normalmente o gcc versão 3.2 ou 3.3 mas deseja compilar o kernel com o 2.95 seguindo as recomendações da documentação, faça o seguinte:

Instale o gcc-2.95. Vamos assumir que ele seja instalado em /usr/bin/gcc-2.95, substitua pelo local correto da sua instalação.

Para usá-lo para compilar o kernel, basta passar o parametro ‘CC’ para o make, assim:

[root@host] # make CC=/usr/bin/gcc-2.95 bzImage

[root@host] # make CC=/usr/bin/gcc-2.95 modules

[root@host] # make CC=/usr/bin/gcc-2.95 modules_install

Espero ter sido claro na minha explicação.

Leia também:

32 Comentários sobre “Como compilar o kernel 2.6”

Faça um comentário

#1 | Lucas Martinez

Salve !

Não achei o campo para dar um parabens para meu amigo Bruno.

Quero falar que o projeto esta otimo, portal r0x e obrigado por ajudar a comunidade.

Quem não sabe o Bruno ja colaborou com artigos dentro do site LinuxDicas e ajuda tambem no forum.

Então como Fundador e Moderador do LinuxDicas não poderia de deixar meu COMENTARIO aqui a onde for para esse meu camarada.

Abraços

Lucas ( hyperblade )


#2 | Rodrigo

OLá Bruno,

gostaria de também dar-lhe os parabéns pelo seu artigo, e aproveitar para perguntar se você poderia me dar uma luz sobre a utilização do modconf com arquivos .ko

Grato,

Rodrigo


#3 | Bruno Torres

Primeiro obrigado pelos elogios..Valeu Lucas!!

Quanto ao modconf, ele é usado para os kernels da versão 2.4. Como citei no artigo, você deve instalar o module-init-tools, que substitui o modconf, mantendo compatibilidade com o 2.4 e os mesmos comandos (modprobe, lsmod, modinfo, etc…)


#4 | Fúlvio Cezar Canducci Dias

Gostei muito deste artigo, e acho isso um grande iniciativa no crescimento do linux …


#5 | Vinícius

Salve, salve galera.

Eu gostei da dica mas só eu estou meio na dúvida. É o seguinte. Digamos que eu configurei tudo dentro do kernel sem nenhum módulo, entaum eu digito:

#make menuconfig

#make

#make bzImage

#cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.4

#cp /usr/src/linux/.config /boot/config-2.6.4

#cp /usr/src/linux/System.map /boot/System.map-2.6.4

Mas se eu der um ‘make’ automáticamente é criado um vmlinuz, não é? E outra coisa. Pra que o config-2.6.4 e o System.map-2.6.4? O que mais precisa pra se configurar um kernel no RedHat 9.0?

Agradeço desde já.

Vinícius.


#6 | Bruno Torres

Se você de apenas make ele vai fazer a compilação de diversos alvos, vmlinux (não confunda com vmlinuz), bzImage e modules.

Eu prefiro fazer por partes, você decide. Um make help vai te explicar sobre os alvos do make e o que cada um significa.

O System.map é um arquivo de mapa do kernel, sobre módulos e versões e o config é apenas pra efeito de backup da configuração, vc escolhe se copia ou nao, mas é recomendavel que copie.

Tudo que você precisa pra compilar o kernel em qualquer distro está descrito neste artigo, nada mais precisa ser feito.


#7 | Xterminator

Bruno meu camarada , do jeito que você faz, a gente

acha até simples compilar o kernel , gostei do Artigo do 2.4 e agora este do 2.6 se não for o mais simples prático e didático , não sei o que é então….

PS::

Eu como disse no canal Adorei o layout da tua página.

Valeu….

PS uma pequena mas importante observação , não confundir “modconf” ferramenta para carregamento de módulos do Debian com o modutils , pois o mesmo é apenas um front-end ,

e pro nosso amigo que perguntou sobre o .ko “kernel object” ,não é possível carregar ko com o modutils antigo …

Abraços


#8 | Roger M. Lima

Parabéns Bruno, é pessoas como você que faz a nossa comunidade crescer mais e mais !


#9 | Mateus

Parabens pelo site.

Sou iniciante, estou recompilando o kernel 2.6.4 seguindo esse tutorial,tive problema com module-init-tools, segui o tutorial desse site que fala sobre como instala-lo, mas nao adiantou continua aparecendo: Warning: you may need to install module-init-tools

See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt

INSTALL drivers/net/tokenring/3c359.ko

cp: cannot stat `drivers/net/tokenring/3c359.ko’: Arquivo ou diretório não encontrado

make[1]: ** [drivers/net/tokenring/3c359.ko] Erro 1

make: ** [_modinst_] Erro 2

Uso Red Hat 9

Me ajudem…

GRATO


#10 | dedealencar

já pensou em estudar física… você seria o novo Albert Einstein! :)
parabéns, seu artigo é ótimo.


#11 | Jairo Haake

Muito massa!!

Excelente artigo, dava dando uns pau antes de eu ler…

mas agora tah massa…

Valeu..


#12 | Humberto

Excelente artigo: claro, curto e objetivo. Muito obrigado, Bruno!


#13 | Jonas

Estou testando algumas distribuições (FreeBSD e Debian) vou tentar atualizao o kernel com as excelentes dicas que foram dadas na sua página, parabéns cara. São de pessoas como vc que nós, simples mortais, precisamos para alavancar a utilização do software livre.


#14 | ipinto

Oi Bruno!

Falo de Portugal. Tenho tido o seu site como uma referência e portanto os meus parabens.

Vi o seu tutorial sobre como compilar o kernel 2.6. Como estou tento uns problemas com o relógio no mandrake 10 (os segundos andam muito rápido - 1s=2s), pensei que com um novo kernel o problema ficaria resolvido. No entanto, fizendo tudo como está no seu tutorial tudo bateu certo até ? hora em fiz #make bzImage. No fim deu o seguinte erro que não faço ideia do que seja:

fs/nls/nls_base.c: In function `char2uni’:

fs/nls/nls_base.c:465: internal compiler error: Segmentation fault

Please submit a full bug report,

with preprocessed source if appropriate.

See <URL:https://qa.mandrakesoft.com/> for instructions.

make[2]: ** [fs/nls/nls_base.o] Erro 1

make[1]: ** [fs/nls] Erro 2

make: ** [fs] Erro 2

Está a faltar alguma coisa? Será que você me pode ajudar?

Abraço.


#15 | tim

meus parabens pelo seu artigo…

simples, objectivo, acessivel (para novatos como eu)…

simplesmente impecavel…

cumprimentos

TIM


Bruno e isso cara o seu site salvou a minha vida , estava trabalhando na data do dia 26/12/04 , e precisava compilar o Kernel do linux e nao sabia como fazer isso , gracas a suas dicas resolvi o problema , pois estava precisando apenas disso para colocar um REAL APLICATION CLUSTER DA ORACLE NO AR . Um forte ABRACO , Fábio Santana


#17 | Jeferson Kadowaki

Excelente didática, seu artigo é fácil e rápido. Ao contrário de vários documentos para atualização de kernel, que estão na Internet.

Obrigado,

Jeferson


#18 | valtemir

fiz todos os passos mas quando eu digito: make mrporper

ele escreve varias mensagem assim:

bin/us: invalid character 46 in export for AFLAGS_vmlinx.ids.o

uso: conetiva o q esta acontecendo, o que deve fazer


ae bruno, muito bom tuto,
ja q eu acabei de instalar o slackware 10.2, eu vou fazer isso ai, compilar o kernel 2.6.x pro meu slack
tomara que eu acerte tudo, pq eu sou newbye e não sei quase nada a respeito de programação ou instalação do linux
mas concerteza, o linux eh o melhor
-.-’
flwww


Estou a semana toda tentando compilar o kernel do slackware 10.2 e em vão, depois de uma verdadeira busca insólita por um texto de explicação que realmente funcionasse me deparei com estes posts de agradecimento o que fez com que a luz no fundo do tunel voltasse a brilhar.

Oh lá rapaziada, vou tentar aqui, se conseguir, volto aqui para postar mil agradecimentos.

T+
8IT4V3R4


#21 | Márcio Lins

olá, td blz! muito bom este tuto, agora aconteceu uma pequena falha… heheeh ninguém escapa!

image /boot/vmlinuz-2.6.4

ops! era para ser!

image = /boot/vmlinuz-2.6.4

sem o sinal, vai causar um erro!


Galera o texto é bom, funciona mesmo.

8IT4V3R4


#23 | Carlos

parabens pela explicação, porem tenho uma dúvida. È que eu uso o grub e não o lilo….como faço então?


#24 | flep

Aqui no meu Fedora deu “quase” tudo certo.
A unica coisa é na hora de iniciar pelo novo kernel, ele pede o parametro “initrd” (uso o GRUB), o qual vc nao explica aqui neste artigo.
No meu grub, a linha que escreve o kernel default esta com este parametro assim: initrd /initrd-2.6.11-1.1369_FC4.img

O que eu teria que colocar pro meu segundo kernel??
Abraços


#25 | Manuel Carvalheira

Muito bom este artigo, deu-me uma ajuda preciosa.
Muito obrigado.


#26 | fabio

uso o ubuntu e não consigo encontrar /usr/src/linux, /src está vazia… (desculpem a ignorância…rs)


#27 | Jean

E necessario q eu esteja com todos os meus hardwares configurados certinho????
por ex, esta tudo funcionando mas eu n configurei nada manualmente que nao seja o mouse…preciso configurar o resto tp monitor teclado vga placa de rede….ou eu ja posso compilar do jeito q esta


#28 | João Paulo

Bruno,
Tentei implementar o seu passo-a-passo, diga-se EXCELENTE passo-a-passo, mas encontrei os seguintes erros:
1 - Ao executar o path:
|diff -Naurp linux-2.6.4-base/arch/alpha/kernel/init_task.c linux-2.6.4-ck1/arch/alpha/kernel/init_task.c
|— linux-2.6.4-base/arch/alpha/kernel/init_task.c 2004-03-11 21:28:53.000000000 +1100
|+++ linux-2.6.4-ck1/arch/alpha/kernel/init_task.c 2004-03-11 22:45:15.103539128 +1100
————————–
File to patch:
Skip this patch? [y]

The next patch would create the file drivers/video/bootsplash/render.c,
which already exists! Assume -R? [n]

2 - Erro ao fazer o make:
[root@casa 2.6.17-1.2157_FC5-i686]# make
CHK include/linux/version.h
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf -s arch/i386/Kconfig
file drivers/video/bootsplash/Kconfig already scanned?
make[2]: ** [silentoldconfig] Erro 1
make[1]: ** [silentoldconfig] Erro 2
make: ** [include/linux/autoconf.h] Erro 2

Será que você pode dar uma força?

Valeu,
JP


#29 | Rafael Puga

Olá, segui o passo-a-passo com o Kernel 2.6.17 e ocorreu tudo normalmente, exceto por um Kernel Panic pq o suporte a ReiserFS estava como módulo e o fato de eu ter aplicado o patch criou uma pasta /lib/modules/2.6.17-ck1 ao invés de /lib/modules/2.6.17 sendo assim, criei um initrd.gz e deu tudo certo, porém, meu Kernel passou a ser 2.6.17-ck1 e pra instalar o módulo de vídeo da NVidia, é necessário que se tenha o source do kernel usado, no caso eu tinha o source 2.6.17 e nao o 2.6.17-ck1. Por fim, compilei sem o patch, mas queria saber se tem como a aplicação do patch nao faça essa alteração colocando o -ck1 no final pra eu nao ter que criar initrd e poder ter o mesmo source do kernel usado. Um pouco da minha saga: http://forum.slacklife.com.br/viewtopic.php?t=4802

Grato =)


#30 | JJC

Fala meu bom,,,,sou do RJ e no meu fedora apresentou o mesmo prob do amigo ( #24 | flep ),o qual ainda naum hove resposta…

Aqui no meu Fedora deu “quase” tudo certo.
A unica coisa é na hora de iniciar pelo novo kernel, ele pede o parametro “initrd” (uso o GRUB), o qual vc nao explica aqui neste artigo.
No meu grub, a linha que escreve o kernel default esta com este parametro assim: initrd /initrd-2.6.11-1.1369_FC4.img

Ficarei mt grato se alguem puder ajudar,,,,,absssss
abssssss


#31 | Adama

bicho realmente foi muito claro as explica;’oes gostei muito e me ajudou muito.Parabens e obrigado


#32 | Leandro

Os passos estão ótimos e bem claros.
Mas esse patch tá zuado.

root@gambix:/usr/src/linux# make bzImage
scripts/kconfig/conf -s arch/i386/Kconfig
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CC arch/i386/kernel/asm-offsets.s
In file included from include/linux/preempt.h:9,
from include/linux/spinlock.h:49,
from include/linux/seqlock.h:29,
from include/linux/time.h:8,
from include/linux/stat.h:60,
from include/linux/module.h:10,
from include/linux/crypto.h:21,
from arch/i386/kernel/asm-offsets.c:7:
include/linux/thread_info.h: In function `thread_info_init’:
include/linux/thread_info.h:59: error: structure has no member named `generic’
include/linux/thread_info.h:60: error: structure has no member named `generic’
In file included from arch/i386/kernel/asm-offsets.c:8:
include/linux/sched.h: At top level:
include/linux/sched.h:1150: error: duplicate member ‘ioprio’
make[1]: *** [arch/i386/kernel/asm-offsets.s] Error 1
make: *** [prepare0] Error 2
root@gambix:/usr/src/linux#

Sem o patch a coisa flui bem melhor!
Abraços


« Velox no Linux

module-init-tools »

Deixe seu comentário

Buscas populares: Ganhar dinheiro, AdSense, Velox, Acessibilidade, IE7, CSS Position, Quero ganhar dinheiro


Veja as estatísticas

uk vpn Mp3sparks