Você está na página 1de 11

Por que recompilar o kernel?

• A primeira intenção é otimizar o kernel para o seu hardware afim de melhorar


sua performance e suportar todos os dispositivos.
• Você também pode querer atualizar o sistema, obtendo suporte a novos recursos
e dispositivos de hardware.
• Ou você pode querer se livrar de BUG's.

O que é o kernel?
O kernel Linux é centro do sistema operacional. A parte do sistema responsável pelo
gerenciamento de baixo nível do hardware e software.

Quais são os requerimentos mínimos de hardware?


Isso varia muito de acordo com a arquitetura e a versão do kernel. Mas tenha em mente
o seguinte para ter um sistema mínimo funcional:
• 16MB de RAM (memória física)
• 100MHz de clock de processamento
• 100MB de espaço em disco (memória virtual)

Mas o que eu tenho de hardware?


Execute o comando:

$ lspci
ou
$ lspci -vvv
ou
$ cat /proc/pci

Mas que processador eu tenho, qual é o clock, qual é a arquitetura?


Execute o comando:

$ cat /proc/cpuinfo

Qual é a quantidade de memória que eu tenho?


Execute o comando:

$ cat /proc/meminfo

Quais são os softwares mínimos que devem estar instalados para executar o kernel?
Veja a parte VII.

O kernel Linux é Software Livre?


Sim! É Software Livre porque cumpre com os quatro direitos da GPL (General Public
License). Veja só:
• O direito de cópia: sim, você pode fazer cópias ou downloads do kernel
livremente.
• O direito de estudo: sim, você pode baixar o código-fonte do kernel em
http://www.kernel.org e estudá-lo.
• O direito de modificação: sim, você pode modificar o código-fonte do kernel e
enviar suas modificações as pessoas responsáveis.
• O direito de redistribuição: sim, você pode redistribuir livremente o kernel.

Mãos à obra!

Passo I
Baixe o pacote que contém o código-fonte mais atualizado do kernel Linux da série 2.6
em http://www.kernel.org.

Abrindo a página no navegador web, clique no link "F" para fazer o download do pacote
que contém os fontes.

Você também poderá fazer o download com o comando wget como no exemplo abaixo:

$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.7.tar.bz2

Passo II
Como superusuário (faça o login no sistema com o usuário root), descompacte e
desempacote o arquivo assim:

# tar xjvf linux-2.6.7.tar.bz2 -C /usr/src

Passo III
Crie o link simbólico /usr/src/linux apontando para /usr/src/linux-2.6.7 assim:

# ln -sf /usr/src/linux-2.6.7 /usr/src/linux

Passo IV
Acesse /usr/src/linux assim:

# cd /usr/src/linux

Passo V
Edite o arquivo Makefile para personalizar a versão de sua compilação. Altere a variável
EXTRAVERSION na quarta linha para um valor que deseje, como por exemplo -i386-
c1. Salve este arquivo.

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 7
EXTRAVERSION = -i386-1

Passo VI
Caso você já tenha compilado o kernel anteriormente, execute o comando 'make
mrproper' para retornar ao padrão os arquivos de configuração do kernel:

# make mrproper

Passo VII
O arquivo /usr/src/linux/Documentation/Changes contém uma lista do software mínimo
que deve estar corretamente instalado na máquina antes de iniciar a compilação.

Não inicie a compilação do kernel sem antes obtiver a certeza de que o mínimo de
software está instalado.

Existe um script que pode auxiliar nisto. O script /usr/src/linux/scripts/ver_linux


imprime na tela uma lista do software mínimo e suas respectivas versões que estão
instalados na máquina. Compare esta lista com a lista oferecida pelo documento
/usr/src/linux/Documentation/Changes. Para executar este script, faça assim:

# sh scripts/ver_linux

Eis a lista de software mínimo requerido para um kernel da série 2.6 poder funcionar:
o Gnu C 2.95.3 # gcc --version
o Gnu make 3.79.1 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.29 # tune2fs
o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V
o xfsprogs 2.6.0 # xfs_db -V
o pcmcia-cs 3.1.21 # cardmgr -V
o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.5.3 # oprofiled --version
Nem tudo na lista acima é obrigatório. Será obrigatório ter os ítens instalados da lista
acima apenas aqueles que o kernel que você está configurando suportar.

Por exemplo, se você não configurou o suporte a ISDN, não é necessário ter instalado
na sua máquina o software isdn4k-utils para poder compilar e executar o kernel.

Passo VIII
O arquivo /usr/src/linux/.config armazena a configuração do kernel. Basicamente, este
arquivo descreve o que deverá ser incorporado ao kernel (y) e o que deverá ser criado
como módulo (m). Incorpore ao kernel apenas o necessário. O restante necessário,
configure como módulo. O que não for necessário, retire. Por exemplo, se você não tem
dispositivos pcmcia em sua máquina, retire da configuração o suporte a pcmcia. Isto
possibilita uma maior performance por parte do sistema.

O kernel Linux pode ser modular, ou seja, o suporte básico fica incorporado ao kernel
constantemente e o suporte a outros dispositivos, como por exemplo, uma placa de som,
pode ser configurado como módulo. Assim sendo, este módulo da placa de som é
carregado na memória e plugado ao kernel apenas quando for necessário, ou seja,
apenas quando o usuário estiver utilizando som no sistema. Isto otimiza o sistema,
utilizando seus recursos sabiamente.

Existe uma configuração padrão para cada tipo de arquitetura de hardware no diretório
/usr/src/linux/arch. O nome do arquivo é defconfig. Supondo que sua arquitetura de
hardware seja i386, a mais comum, faça uma cópia do arquivo defconfig para o
diretório raiz de compilação com o nome .config assim:

# cp -f /usr/src/linux/arch/i386/defconfig /usr/src/linux/.config

Para saber qual é a sua arquitetura, execute o comando abaixo:

$ cat /proc/cpuinfo

Sendo assim, ao iniciar a ferramenta de configuração, você já terá alguns itens


marcados. Não será necessário iniciar do zero uma configuração.

Passo IX
Execute a ferramenta de configuração assim:

# make menuconfig
ou
# make xconfig (modo gráfico)

Perceba a existência de uma configuração já pré-definida. Isto se deve ao fato de você


ter copiado o arquivo defconfig para o diretório raiz de compilação com o nome de
.config.

Algumas dicas:
1. Marque com * itens que serão incorporados ao arquivo do kernel como por
exemplo, sistemas de arquivos que você utiliza ou vai utilizar em suas partições.
2. Marque com m itens que serão criados como módulo, ou seja, serão plugados ao
kernel apenas quando houver necessidade de uso.

Passo X
Após a configuração do kernel, vamos compilá-lo realmente. Para isto, execute o
comando:

# make bzImage

Passo XI
Após a compilação do kernel, vamos instalar os módulos com o seguinte comando:

# make modules_install

Passo XII
Agora vamos copiar o kernel (bzImage) para o diretório /boot. O arquivo está no
diretório de acordo com a arquitetura que você estiver utilizando. Se você compilou o
kernel em um PC, o que é mais comum, então o comando para copiar é o seguinte:

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.7-i386-c1
(nomeie o arquivo de acordo com a sua versão)

Agora vamos copiar o arquivo System.map para /boot:

# cp /usr/src/linux/System.map /boot/System.map-2.6.7-i386-c1
(nomeie o arquivo de acordo com a sua versão)

Criando um link simbólico para System.map:

# ln -sf /boot/System.map-2.6.7-i386-c1 /boot/System.map

Agora vamos copiar o .config para /boot:

# cp /usr/src/linux/.config /boot/config-2.6.7-i386-c1
(nomeie o arquivo de acordo com a sua versão)

Passo XIII
Vamos criar um arquivo initrd assim:

# mkinitrd -o /boot/initrd-2.6.7-i386-c1.img 2.6.7-i386-c1

Passo XIV
Vamos configurar o gerenciador de boot, GRUB ou LILO, qual você utiliza?

-> Configuração GRUB (isto é só um exemplo):


Note que você não precisa regravar o GRUB no MBR ou partição específica após feitas
as alterações.

boot=/dev/hda
default=0
timeout=10
title Debian GNU/Linux (2.4.25-i386-c4)
root (hd0,1)
kernel /boot/vmlinuz-2.4.25-i386-c4 ro root=LABEL=/
initrd /boot/initrd-2.4.25-i386-c4.img
title Debian GNU/Linux (2.6.7-i386-c1)
root (hd0,1)
kernel /boot/vmlinuz-2.6.7-i386-c1 ro root=LABEL=/
initrd /boot/initrd-2.6.7-i386-c1.img

-> Configuração do LILO (isto é apenas um exemplo):

Note que você precisa regravar o LILO no MBR ou partição específica após feitas as
alterações.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
default=2.6.7
lba32
prompt
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
label=2.4.25
root=/dev/hda3
append="hdc=ide-scsi"
read-only
image=/boot/bzImage-2.6.0
label=2.6.7
root=/dev/hda3
read-only

Execute lilo para regravar o LILO no MBR.

# /sbin/lilo

Não remova a configuração do kernel anterior que estava funcionando. Ele será útil para
inicializar a máquina em caso de alguma falha na inicialização do novo kernel.

Reinicie sua máquina e boa sorte!

Aliás, esta é a única vez atualmente que é necessário reiniciar sua máquina quando seu
sistema é Linux. Eu disse atualmente, pois isto já está em discussão e desenvolvimento
com o pessoal do kernel.
Num futuro bem próximo, não será necessário reiniciar sua máquina para executar um
novo kernel.

E falando de hardware, você não mais precisará reiniciar sua máquina para trocar uma
placa PCI ou até mesmo um processador em um sistema de multi-processadores.

Qualquer correção neste artigo é só me avisar! Eu agradeço pela leitura.

--
[]'s
Jonas Goes
http://www.goes.eti.br

Navegação
1. Compilando um kernel Linux série 2.6

Outros artigos deste autor


Nenhum artigo encontrado.

Leitura recomendada
Atualizando o kernel no Slackware
As incríveis aventuras de um RedHat 9 migrando para kernel 2.6
Compilando o KERNEL sem medo do "kernel panic"
Kernel 2.6.7 compilado e configurado para nVIDIA
Compilando o kernel 2.6.13 no Slackware 10.2

Comentários
Comentário enviado por malako em 20/07/2004 - 09:22h:

Nunca compilei um, mas acredito que o tutorial ai esta de parabens material como esse é
dificil de se encontrar pelo menos em portugues geralmente muito simplificado e nao
ajudando em nada , parabens mais uma vez pelo artigo cara vlw mesmo . com certeza
vai ajudar muitos iniciantes a pelo menos mexer e ver no que dá .

Comentário enviado por pulgacapoeira em 20/07/2004 - 09:39h:

kra eu nunca compilei o kernel tb....

agora me deu ate coragem pra fazer isso :)


com certeza hj eu vou estar compilando o kernel!

valeu Jonas Goes....t+

Comentário enviado por wronieri em 20/07/2004 - 12:30h:

Muito bom o artigo parabens ;-)

Comentário enviado por cros em 20/07/2004 - 12:51h:

Uma duvida! Alguém tinha dito que as novas versoes apartir do 2.6.xx os comando
eram automaticos, nao sendo necessario mais fazer make bzImage, make modules ,
make modules_install?!?!
Comentário enviado por jllucca em 20/07/2004 - 15:51h:

Opa, cara!!

O artigo tá muito bom queria apenas dizer umas coisas. O Kernel não é o "centro" do
Sistema Operacional. Ele é o Sistema Operacional Linux, todo o resto é parte da
"distribuição Linux". Mas, não chega a ser um erro pensar que ele é o "centro" até eu
mesmo já chamei ele assim. Agora, uma dúvida minha nunca compilei essa nova versão
do kernel, mas nos kernels que compilo sempre faço: make mrproper menuconfig dep
clean bzImage modules modules_install. Assim, não falto alguma coisa ali entre o Passo
IX e Passo X???

[]'s

Comentário enviado por warlinux em 20/07/2004 - 16:49h:

Também gostei muito do artigo e ficou muito bom com o Kernel 2.6, bem rápido para
iniciar os programas etc.

Porém está dando um erro de montar as partições que estão no /etc/fstab dizendo que
não tem suporte para o sistema.

Porém quando monto a partição manualmente mount /dev/hda /mnt/win_c/


a partição é montada sem problemas.

Alguém tem alguma idéia.

Sem mais,

obrigado e parabéns.

Comentário enviado por jllucca em 20/07/2004 - 17:37h:

Warlinux,

essa discução acho que não faz parte desse artigo. Se quiser, mande a linha que tu utiliza
no /etc/fstab referente ao /mnt/win_c que lhe ajudo. :)

[]'s

Comentário enviado por pulgacapoeira em 20/07/2004 - 17:41h:

eh eu precisei digitar make modules e depois make modules_install

falo t+

Comentário enviado por cherokee em 21/07/2004 - 00:28h:

Esse artigo demorou, mas não esquenta com isso naum, nunca é tarde para ser feliz
nesta comunidade...

[]s
Comentário enviado por koy182 em 26/07/2004 - 19:44h:

Oi galera, eu to tentando atualizar meu kernel agora, mais tem um problema, eu dou bot
pelo disquet, e desejo continuar fazendo isso, alguem pode me ajudar como eu faço um
bot de disquet pra ir direto pro novo kernel?
E mais uma duvida, depois qui eu testar o nome kernel, e ele tiver rodando beleza, como
retiro da minha maquina vestigios do antigo kernel?
Espero por respostas aki, mais se caso nao der, e quiser me enviar um email, ta ai,
koy182@ig.com.br

Muito obrigado, e por favor me ajudem nas duas questões. T+

Comentário enviado por andreguerra em 10/09/2004 - 09:36h:

Muito bom o artigo, realmente nunca vi em português um material tão explicado.


Parabéns, vai servir pra encorajar os marinheiros de primeira viagem, além de trazer
detalhes ainda desconhecidos para os marujos mais experientes..:-)

Muito bom mesmo, parabéns.

Abraço,

André

Comentário enviado por edmafer em 12/11/2004 - 13:43h:

Graças ao seu artigo, e também o do amigo:


http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=731,

e claro também algumas informações extras adquiridas durante as tentativas (foram 19)

Hoje, eu consegui executar o meu primeiro Kernel.

Deêm uma olhada neste outro artigo, e também no make help que vai ajudar bastante
vocês.

[]'s

A todos

Comentário enviado por edmafer em 12/11/2004 - 13:45h:

Koy182 faça o make help, que ele tem uma opção sobre como criar um disco de boot.
Acredito que é isto que você procura.

Comentário enviado por luiscarlos em 11/12/2004 - 11:24h:

Cara, apos compilar o kernel-2.6.5 o rpm para de funcionar no redHat 9, eu mantive o


kernel antigo e lah funciona porem alguns modulos param de funcionar como o modulo
que me permiteler particoes ntfs, ou seja, meu kernel novo não vai 100% e o antigo
"ganha" alguns problemas como esse do modulo.
Comentário enviado por rskinner em 11/03/2006 - 14:19h:

Ola, estou tentando compilar o kernel para tentar fazer funcionar minha web cam Go
Tec 300 e estou tendo o seguinte erro apos dar o comando make.

[root@localhost 2.6.11-1.1369_FC4-i686]# make


CHK include/linux/version.h
CHK include/asm-i386/asm_offsets.h
make[1]: *** Sem regra para processar o alvo `init/main.o', necessário por `init/built-
in.o'. Pare.
make: ** [init] Erro 2

o que posso fazer para resolver isso.. fiz a atualização do kernel para o 2.6.15 mas o erro
persiste. Grato
Rskinner

Comentário enviado por alexffox em 08/05/2006 - 17:53h:

Passo XIII

Vamos criar um arquivo initrd assim:

# mkinitrd -o /boot/initrd-2.6.7-i386-c1.img 2.6.7-i386-c1

o certo é mkdirinitrd ?
mkinitrd -o /boot/initrd-2.6.14i386-1.img 2.6.14i386-1
bash: mkinitrd: command not found

Comentário enviado por icarooo em 12/05/2006 - 14:50h:

alexffox vc tem q instalar o pacote de mkinitrd, si for slack installpkg mkinitrd-


xxxxx.tgz si for debian usa o apt-get, e rskinner pra vc tb ta faltando pacotes, vc precisa
ter varios glib gcc etc

Comentário enviado por korn 21 em 29/11/2006 - 13:29h:

Ola, quando eu faço tudo isso, mais quando renicio a maquina, ele entra no lilo carrega
a imagem, mais depois disso nao aparece mais nada, qual é o erro?, a tela fica cinza e
trava, nao aparece nada nem se quer um kernel panic, vcs sabem o que pode ser? valeu

Comentário enviado por elieser_topassi em 18/12/2006 - 14:11h:

Amigo, deve haver um erro no seu artigo...

o comando mkinitrd não existe!!!

pesquisando o apt-cache tb não encontra nada relacionado a mkinitrd...


qual o pacote que deve ser instalado para que isso funcione ???

Comentário enviado por blackwolf em 29/05/2007 - 16:15h:

muito bom artigo, não tinha tentado recompilar meu kernel antes mais como agora vou
usar apenas o linux vou tentar.
no meu slack 11 existe sim o comando mkinitrd, como disse o icarooo deve faltar algum
pacote.

Comentário enviado por fabri em 15/06/2007 - 08:50h:

Cara foi facil, fiz segui seu tuto, e apos o reboot meu kde 356 ficou lentissimo, no
reboot quase 40s aquele icone saltante no inicio fica parecendo bailarina em
slowmouch, abaixo segue meu lspci, onde gosstaria de um sugestao de onde deveria
fazer as modificacoes nessessarias para obter um kde pos recompilacao mais rapido,
ficaria muito grato, meu kernel e o 2.6.22, kernel 3.5.6 slack 11....................
/home/fabri# lspci
00:00.0 Host bridge: Silicon Integrated Systems [SiS] 645xx (rev 03)
00:01.0 PCI bridge: Silicon Integrated Systems [SiS] Virtual PCI-to-PCI bridge (AGP)
00:02.0 ISA bridge: Silicon Integrated Systems [SiS] SiS963 [MuTIOL Media IO] (rev
25)
00:02.1 SMBus: Silicon Integrated Systems [SiS] SiS961/2 SMBus Controller
00:02.5 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE]
00:02.7 Multimedia audio controller: Silicon Integrated Systems [SiS] AC'97 Sound
Controller (rev a0)
00:03.0 USB Controller: Silicon Integrated Systems [SiS] USB 1.0 Controller (rev 0f)
00:03.1 USB Controller: Silicon Integrated Systems [SiS] USB 1.0 Controller (rev 0f)
00:03.2 USB Controller: Silicon Integrated Systems [SiS] USB 2.0 Controller
00:04.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 PCI Fast Ethernet
(rev 91)
00:09.0 Multimedia audio controller: Cirrus Logic Crystal CS4281 PCI Audio (rev 01)
00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev
11)
00:0a.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
00:0c.0 Ethernet controller: Marvell Technology Group Ltd. 88w8335 [Libertas]
802.11b/g Wireless (rev 03)
01:00.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200] (rev
01)
01:00.1 Display controller: ATI Technologies Inc Unknown device 5942 (rev 01)

Você também pode gostar