quarta-feira, 22 de fevereiro de 2012

Compilando um kernel 3.2.7 no Debian Squeeze

Bom, para inaugurar o Dia a dia linux,  vamos começar com um assunto que interessa a vários usuários linux.
A vezes cercado de mito. Visto como um tarefa complexa. Mas, devemos concordar, o processo de compilação exige de fato conhecimento sobre o hardware da maquina, para que ocorra uma melhora no real no desempenho do equipamento. Porém não se assustem é uma ótima oportunidade para apreender sobre o hardware de sua maquina. No entanto no Debian squeeze o procedimento é  relativamente simples.
Neste tutorial  não abordaremos como coletar informações do hardware, ou configurar repositórios da maquina. Presumiremos que você já tenha um desktop previamente configurado com todas as informações do hardware da sua maquina.
Prometo em breve postar sobre o assunto.
Agora é só seguir alguns passos:
Primeira etapa instalar os pacotes necessários para compilação no Debian

Primeiro vamos logar como usuário root no prompt de comando aparecera o caracter #  o comando é:

1ª Passo instalar pacotes necessários  para compilação:
# apt-get install build-essential libncurses5-dev

2º Passo baixar o kernel do site: http://www.kernel.org  no diretório /usr/src/ com o comando:
# wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.7.tar.bz2
Neste  site encontraremos a ultima imagem do kernel no nosso caso a versão 3.2.7

3º passo:   Descompactamos o kernel baixado em /usr/src/ com o comando:
# tar -jxvf linux-3.2.7.tar.bz2


Dica: " Recomendo quando descompactar o kernel dar uma olhada dentro dos diretórios
lá você encontra diretórios como o /usr/src/linux/Documentation que contém muita documentação sobre o kernel parâmetros de compilação, nomes de livros para referência 
bem como links para diversos sites sobre o assunto assim como alguns how-tos "

4º passo:  Criar um link simbólico com o nome de linux dentro de /usr/src/  para o diretório criado pelo arquivo descompactado no caso  linux-3.2.7/ com o comando:
# ln -s linux-3.2.7 linux

5º Passo: Com o comando cd  mudamos para a  pasta do arquivo do kernel descompactado
# cd  linux

6º Passo utilizar o comando:
 # make menuconfig
Após digitar o comando acima  você entrara no menu de configuração do kernel
em outra oportunidade comentaremos suas opções a fundo.
No menu de configuração do kernel você  habilita o suporte do seu kernel a determinados tipos de hardware ou recursos.
o comando make menuconfig gera o arquivo .config o qual fornece os parâmetros para compilação do kernel.



Dica: "Uma medida que adianta tempo para futuras compilações é salvar o arquivo .config para futuras compilações, ou usar um arquivo .config,  do kernel que roda atualmente em sua maquina. Assim, quando você abrir o menu de configuração com o comando: make menuconfig as opções básicas de seu hardware já estarão selecionadas. um bom local para guardar seu arquivo .config é o diretório /boot  com o nome de: config.sua_versão_de Kernel."


7º passo  editar o arquivo Makefile com o editor de texto de sua preferência no meu caso o editor vi
# vi /usr/src/linux/Makefile

VERSION = 3
PATCHLEVEL = 2
SUBLEVEL = 7
EXTRAVERSION = C01

Vamos editar  o arquivo Makefile nas 04 primeiras linhas desse arquivo encontraremos  as 04 variáveis que armazenam o nome do kernel
Vamos editar a linha que contém a variável " EXTRAVERSION =  " nela colocaremos a versão de
de nossa compilação indicando a personalização do kernel.
Em nosso exemplo para fins didáticos, colocamos C01 de primeira compilação. Note que você pode por
o valor que achar melhor.
Obs: O arquivo Makefile é enorme com diversos parâmetros mas hoje, vamos nos concentrar nas 4 primeiras linhas.

8º Passo gerar a imagem do kernel propriamente dita com o o comando :
# make bzImage
o comando acima gera um arquivo de imagem de kernel com o nome de bzImage do diretório:
/usr/src/linux/arch/x86/boot/bzImage
O  diretório pode variar de x86 para x86_64 ou outro dependendo da arquitetura de sua maquina.
Esse processo dependendo da maquina costuma demorar um pouco, sabe aquele café ?  melhor ir tomar ele agora :-)

9º passo compilar os módulos  usando o comando:
# make modules
Isso também pode demorar um pouco...
Esse comando costuma demorar um pouco também, dependendo da sua maquina.
O comando acima, compila os módulos dos dispositivos do seu kernel.  

Obs: Para maquinas com mais de um processador pode ser usado o comando:
# make -j4 modules  (Opcional)
Acelerando o processo de compilação realizando em 04 processos simultâneos


10 º passo instalar os módulos compilados com o comando:
# make modules_install 
O comando acima instala os módulos criando o diretório /lib/modules/sua_versão_de _kernel 
em nosso caso o diretório: 
/lib/modules/3.2.3C01



11º passo: instalar o kernel com o comando:
# make install


12º passo: agora vamos para o diretório /boot com o comando:
# cd /boot/      
Dentro deste diretório geraremos a imagem inicial do kernel initrd (de initial ram disk)


13º passo:  gerar a imagem inicial do kernel com o comando:
# mkinitramfs -o initrd.img-3.2.7C01  3.2.7C01
Atenção na parte sublinhada pois nome deve ser igual o da pasta gerada em /lib/modules/
pois é daqui que o comando mkinitramfs  linka e extrai o módulos necessários para inicializar 
a maquina. Se não, na hora de iniciar a maquina o kernel não carregara completamente.
Apresentando o clássico erro : "Kernel Panic"

Agora, tenho uma notícia boa e uma ruim para quem teve a paciência de ler este post até aqui.
Bom a boa notícia é que se você seguiu todos os passos e não teve erros até aqui você já compilou seu kernel. A notícia ruim é que ainda não da para usa-lo. Devemos adiciona-lo no seu gestor de inicialização no caso de quem usa Debian o gestor padrão é o grub então vamos lá:


Peguei você no Debian squeeze esse processo é muito  simples é só digitar o comando:
# update-grub
Depois e só reiniciar a maquina selecionar o kernel compilado e partir para o abraço:

Nos próximos posts comentarei mais detalhes sobre a  compilação como opções do comando make, compilação de módulos de terceiros e etc...
Qualquer duvida é só postar aqui .