Como compilar um Kernel – Ubuntu – parte 1

Cada distribuição tem algumas ferramentas específicas para construir um kernel personalizado a partir dos fontes. Este artigo é sobre a compilação de um kernel em sistemas Ubuntu. Ele descreve como construir um kernel personalizado, utiizando os últimos fontes não modificados do kernel a partir de www.kernel.org (vanilla kernel) , de forma que você não depende dos kernel fornecidos pela sua distribuição. Ele também mostra como aplicar um patch nos fontes do kernel se você precisar de características que não estiverem lá.

Este tutorial foi testado em um sistema Ubuntu 6.10 Server (“Edgy Eft”) e no Ubuntu 6.06 Desktop (“Dapper Drake”).

Esta não é a única forma de instalar o sistema. Há várias outras maneiras de alcançar este objetivo, mas esta é a minha maneira. Não dou nenhuma garantia de que isto irá funcionar para você!

1 Nota Preliminar

Prefiro fazer todos estes passo como usuário root. Então, se você ainda não tiver criado um login de root, você deve fazer isto agora:

sudo passwd root

A seguir, logue-se como root:

su

Se você desejar trabalhar como um usuário normal em vez de utilizar a conta root, lembre-se de colocar o sudo na frente de todos os comando exibidos neste tutorial. Então, quando eu executo

apt-get update

você deveria executar

sudo apt-get update


1.1 /bin/sh no Ubuntu 6.10 (“Edgy Eft”)

No Ubuntu 6.10, /bin/sh é um symlink para /bin/dash por padrão. /bin/dash parece ter problemas quando você compila software a partir dos fontes. Ao menos, tive esta impressão. Por isto, fiz /bin/sh ser um symlink para /bin/bash.

Se você estiver no Ubuntu 6.10, você deve fazer isto agora:

rm -f /bin/sh
ln -s /bin/bash /bin/sh


2 Instalação de pacotes requeridos para a compilação do Kernel

Primeiro, atualizamos nosso banco de dados de pacotes:

apt-get update

A seguir, instalaremos todos os pacotes necessários, assim:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

3 Download dos fontes do Kernel

A seguir, faremos o download do kernel para /usr/src. Vá até www.kernel.org e selecione o kernel que você quer instalar, ex: linux-2.6.18.1.tar.bz2 (você pode encontrar todos os kernels 2.6 aqui: http://www.kernel.org/pub/linux/kernel/v2.6/). Então, você pode baixá-lo para /usr/src assim:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2

A seguir, desempacote os fontes do kernel e crie um symlink linux para o diretório dos fontes do kernel:

tar xjf linux-2.6.18.1.tar.bz2
ln -s linux-2.6.18.1 linux
cd /usr/src/linux

4 Aplicação de patches para os fontes do Kernel (Opcional)

Algumas vezes, você precisa de drivers para hardware que não é suportado pelo novo kernel por padrão, ou você precisa de supote para técnicas de virtualização ou alguma outra tecnologia de ponta que ainda não foi incorporada ao kernel. Em todos estes caso, você tem que aplicar um patch nos fontes do the kernel (se houve tal patch disponível…).

Agora, vamos assumir que você fez o download do patch necessário (vou chamá-lo de patch.bz2 , neste exemplo) para /usr/src. É assim que você deve aplicá-lo aos fontes do kernel (você ainda deve estar no diretório /usr/src/linux ):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 –dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

O primeiro comando é só um teste, não faz nada com os seus fontes. Se ele não exibir erros, você pode executar o segundo comando que irá, realmente, aplicar o patch. Não faça isto se o primeiro comando exibir erros!

Você também pode aplicar prepatches para kernel aos seus fontes do kernel. Por exemplo, se você precisar de uma feature que está disponível somente no kernel 2.6.19-rc4, mas os fontes completos ainda não tenham sido lançados para este kernel. Em vez disso, um patch-2.6.19-rc4.bz2 está disponível. Você pode aplicar o patch aos fontes do kernel 2.6.18, mas não para o kernel 2.6.18.1 ou 2.6.18.2, etc. Isto é explicado em http://kernel.org/patchtypes/pre.html:

Prepatches são equivalentes a versões alpha para Linux. Eles são armazenados nos diretórios testing nos repositórios. Eles devem ser aplicados, utilizando o utilitário patch, no código fonte da versão prévia completa com um número de versão de 3 partes (por exemplo, o prepatch 2.6.12-rc4 deve ser aplicado aos fontes do kernel 2.6.11, e não aos do kernel 2.6.11.10, por exemplo)

Então, se você quiser compilar um kernel 2.6.19-rc4, você deve fazer o download dos fontes do kernel 2.6.18 (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2) do passo 3 em vez do kernel 2.6.18.1 !

É assim que você aplica o patch 2.6.19-rc4 ao kernel 2.6.18:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc4.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1 –dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1