br-linux

Artigos br-linux.org
Artigos sobre Linux em bom português, originais e com qualidade

Compilando um Kernel Linux série 2.6
Publicado em 21 de julho de 2004

Neste tutorial o nosso colaborador Jonas Goes (msl@goes.eti.br) mostra como compilar o Kernel 2.6. Um excelente guia!

Confiram.

COMPILANDO UM KERNEL LINUX SÉRIE 2.6


Por que recompilar o kernel ?
A primeira intenção é otimizar o kernel para o seu hardware a fim de melhorar a performance e suportar todos os dispositivos.
Você também pode querer atualizar o sistema obtendo suporte a novos resursos e dispositivos de hardware.
Ou você pode querer se livrar de BUG's.

O que é o kernel?
O kernel Linux é o 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 e 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

Que arquiteturas são suportadas?
Para saber isso, basta você fazer listar o conteúdo do diretório /usr/src/linux/arch.
Veja lá a listagem para a versão do kernel 2.6.7:

alpha
arm
arm26
cris
h8300
i386
ia64
m68k
m68knommu
mips
parisc
ppc
ppc64
s390
sh
sparc
sparc64
um
v850
x86_64

O seu caso, muito provavelmente deve ser a arquitetura i386, que é a mais comum do mundo dos PC's.
Outra arquitetura muito comum é a PPC (PowerPC), os famosos computadores da Apple.
Sim, o Linux pode ser instalado em um computador da Apple ;)
Você tem um playstation II ai? Então instale um Linux nele!

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

Este será o diretório raiz de compilação, ou seja, o diretório base para os passos seguintes.


- Passo V

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 VI

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-1.
Salve este arquivo.

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


- 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 2>&1|grep reiserfsprogs
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 2>&1|grep version
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 itens 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 harware no diretório /usr/src/linux/arch. O nome do arquivo é defconfig. Supondo que sua arquitetura de harware 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

Em alguns casos de arquitetura, pode existir um diretório configs contendo configurações específicas e testadas para cada modelo de máquina.

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.

Este é um passo demorado e deve ser feito com atenção. Acompanhe o help de cada
item para saber o que está incluindo ou não.


- Passo X

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

# make

Este passo pode levar minutos ou de um dia para o outro. Depende do poder da
máquina onda você vai compilar.


- 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-1

Nomeie os arquivos de acordo com a versão do kernel que está compilando e de acordo com a arquitetura de hardware.

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

# cp /usr/src/linux/System.map /boot/System.map-2.6.7-i386-1

Criando um link simbólico para System.map:

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

Agora vamos copiar o .config para /boot:

# cp /usr/src/linux/.config /boot/config-2.6.7-i386-1


- Passo XIII

Vamos criar um arquivo initrd assim:

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

A opção (-o arquivo) diz onde salvar o arquivo initrd gerado.
A próxima opção de parâmetro é a versão do kernel que você compilou.

Na verdade, o initrd não é necessário caso você tenha incorporado ao kernel todo a hardware necessário para sua inicialização
e o restante que não é necessário para a inicialização como módulo. Ou seja, você não deve configurar como módulo o chipset da sua
placa mãe, suporte a IDE e todos os sistemas de arquivos que estiver utilizando, como ext3, jfs, xfs e reiserfs.

Eu recomendo não utilizar o initrd, pois afinal, este artigo visa criar um kernel específico para a sua máquina.

O initrd é utilizado mais para kernel's genéricos que acompanham as distribuições Linux. As distribuições são lançadas com kernel's
genéricos para suportar o maior número de hardware possível. Então tem muita coisa lá que você não precisa. Afinal, você
não tem todas as marcas de placa de vídeo por exemplo em sua máquina não é mesmo?


- 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-1)
root (hd0,1)
kernel /boot/vmlinuz-2.6.7-i386-1 ro root=LABEL=/
initrd /boot/initrd-2.6.7-i386-1.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!
Alias, 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 em 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 multiprocessadores.


Novas versões deste artigo podem ser encontradas na URL abaixo:
http://www.goes.eti.br/docs/kernel-2.6.txt

Suporte com relação a este artigo por e-mail:
Título: Artigo Compilando um Kernel Linux 2.6
Envie suas dúvidas para msl@goes.eti.br
Qualquer correção neste artigo é só me avisar! Eu agradeço pela leitura.


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

Postado por fuji em julho 21, 2004 11:36 PM

Comentários para "Compilando um Kernel Linux série 2.6"

» Postado por: as em agosto 9, 2004 04:04 PM, 200.201.81.:

    Agora deu coragem de compilar um kernel... com um artigo tao bem explicado. Parabéns ao autor e continue assim!!!

 

» Postado por: carlos em setembro 19, 2004 03:51 PM, 200.234.107:

    vou tentar sair do windows, e usar o linux, boa sorte pra mim, coitado do meu hda !!!!!

 

» Postado por: cleidisson em outubro 6, 2004 10:56 AM, 200.180.200:

    bah show d bola essa explicação, desse jeito fik fácil descompila o kernel valeu e qualquer coisa sobre linux m envie por e-mail...

 

» Postado por: cleidisson em outubro 6, 2004 10:56 AM, 200.180.200:

    bah show d bola essa explicação, desse jeito fik fácil compila o kernel valeu e qualquer coisa sobre linux m envie por e-mail...

 

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)

Envie seu comentário









Lembrar as informações pessoais?


Atenção: Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum, onde mais pessoas estarão disponíveis para respondê-lo..






Nota: os comentários pertencem a seus respectivos autores e são de responsabilidade de quem os postou. O restante desta nota está disponível sob a licença GNU FDL, exceto se explicitamente declarado em contrário.