este 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
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.
Roney Médice
Analista de Sistemas e Bacharel em Direito