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.
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:
- 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.
- 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.
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