Compilação de Kernel · 9 min read · Nov 27, 2025
Como Compilar Um Kernel - O Jeito Debian

Cada distribuição tem algumas ferramentas específicas para construir um kernel personalizado a partir das fontes. Este artigo é sobre compilar um kernel em um sistema Debian (Etch). Ele descreve como construir um kernel personalizado usando as últimas fontes de kernel não modificadas do www.kernel.org (kernel vanilla) para que você seja independente dos kernels fornecidos pela sua distribuição. Ele também mostra como aplicar patches nas fontes do kernel se você precisar de recursos que não estão lá.
Não dou nenhuma garantia de que isso funcionará para você!
1 Nota Preliminar
Descreverei duas maneiras de compilar um novo kernel. Usando o primeiro método, você terminará com um pacote kernel.deb que pode ser instalado no sistema e que você pode compartilhar com outros e instalar em outros sistemas Debian Etch.
O segundo método é compilar um kernel da maneira “tradicional”. Essa maneira funciona em qualquer distribuição Linux, mas, claro, você não terminará com um pacote kernel.deb.
2 Construindo Um Pacote .deb do Kernel
Este capítulo mostra como construir um kernel e terminar com um pacote .deb que você pode instalar e compartilhar com outros.
2.1 Instalar Pacotes Necessários Para Compilação do Kernel
Primeiro, atualizamos nosso banco de dados de pacotes:
apt-get updateEntão, instalamos todos os pacotes necessários assim:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential2.2 Baixar As Fontes do Kernel
Em seguida, baixamos o kernel desejado para /usr/src. Vá para www.kernel.org e selecione o kernel que deseja instalar, por exemplo, linux-2.6.21.3.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.21.3.tar.bz2Então, descompactamos as fontes do kernel e criamos um symlink linux para o diretório das fontes do kernel:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux2.3 Aplicar Patches Nas Fontes do Kernel (Opcional)
Às vezes, você precisa de drivers para hardware que não é suportado pelo novo kernel por padrão, ou precisa de suporte para técnicas de virtualização ou alguma outra tecnologia de ponta que ainda não chegou ao kernel. Em todos esses casos, você precisa aplicar patches nas fontes do kernel (desde que haja um patch disponível…).
Agora vamos supor que você tenha baixado o patch necessário (eu o chamo de patch.bz2 neste exemplo) para /usr/src. É assim que você o aplica às suas fontes do kernel (você deve ainda estar no diretório /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1O primeiro comando é apenas um teste, ele não faz nada com suas fontes. Se não mostrar erros, você pode executar o segundo comando que realmente aplica o patch. Não faça isso se o primeiro comando mostrar erros!
Você também pode aplicar pré-patches do kernel às suas fontes do kernel. Por exemplo, se você precisar de um recurso que está disponível apenas no kernel 2.6.22-rc3, mas as fontes completas ainda não foram lançadas para esse kernel. Em vez disso, um patch-2.6.22-rc3.bz2 está disponível. Você pode aplicar esse patch às fontes do kernel 2.6.21, mas não ao kernel 2.6.21.1 ou 2.6.21.2, etc. Isso é explicado em http://kernel.org/patchtypes/pre.html:
Pré-patches são o equivalente a lançamentos alpha para Linux; eles vivem nos diretórios de teste nos arquivos. Eles devem ser aplicados usando a utilidade patch(1) ao código-fonte do lançamento completo anterior com um número de versão de 3 partes (por exemplo, o pré-patch 2.6.12-rc4 deve ser aplicado às fontes do kernel 2.6.11, não, por exemplo, 2.6.11.10.)
Portanto, se você quiser compilar um kernel 2.6.22-rc3, deve baixar as fontes do kernel 2.6.21 ( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) na etapa 3 em vez do kernel 2.6.21.3!
É assim que você aplica o patch 2.6.22-rc3 ao kernel 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p12.4 Configurar O Kernel
É uma boa ideia usar a configuração do seu kernel de trabalho atual como base para o seu novo kernel. Portanto, copiamos a configuração existente para /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.configEntão, executamos
make menuconfigque traz o menu de configuração do kernel. Vá para Carregar um Arquivo de Configuração Alternativo e escolha .config (que contém a configuração do seu kernel de trabalho atual) como o arquivo de configuração:


Então, navegue pelo menu de configuração do kernel e faça suas escolhas. Quando terminar e selecionar Sair, responda à seguinte pergunta (Você deseja salvar sua nova configuração de kernel?) com Sim:

2.5 Compilar O Kernel
Para compilar o kernel, execute estes dois comandos:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headersApós –append-to-version= você pode escrever qualquer string que ajude a identificar o kernel, mas deve começar com um menos (-) e não deve conter espaços em branco.
Agora seja paciente, a compilação do kernel pode levar algumas horas, dependendo da sua configuração do kernel e da velocidade do seu processador.
2.6 Instalar O Novo Kernel
Após a construção bem-sucedida do kernel, você pode encontrar dois pacotes .deb no diretório /usr/src.
cd /usr/src
ls -lNo meu sistema de teste, eles foram chamados linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (que contém o kernel real) e linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (que contém arquivos necessários se você quiser compilar módulos adicionais do kernel mais tarde). Eu os instalo assim:
dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb(Você pode agora até transferir os dois arquivos .deb para outros sistemas Debian Etch e instalá-los lá exatamente da mesma maneira, o que significa que você não precisa compilar o kernel lá novamente.)
É isso. O arquivo de configuração do carregador de inicialização GRUB /boot/grub/menu.lst foi modificado automaticamente, e um ramdisk para o novo kernel foi criado em /boot.
Agora reinicie o sistema:
shutdown -r nowNo prompt de inicialização, selecione seu novo kernel (deve ser selecionado por padrão):

Se tudo correr bem, ele deve iniciar com o novo kernel. Você pode verificar se está realmente usando seu novo kernel executando
uname -rIsso deve exibir algo como
2.6.21.3-customSe o sistema não iniciar, reinicie-o e selecione seu kernel antigo no prompt de inicialização. Você pode agora tentar novamente compilar um kernel funcional. Não se esqueça de remover a(s) estrofe(s) do kernel que não funcionou de /boot/grub/menu.lst.
3 Construindo Um Kernel Da Maneira Tradicional
Este capítulo descreve uma abordagem diferente que pode ser usada em qualquer sistema Linux (além de detalhes como criar um ramdisk ou atualizar o carregador de inicialização). Claro que você não terminará com um pacote kernel.deb.
3.1 Instalar Pacotes Necessários Para Compilação do Kernel
Primeiro, atualizamos nosso banco de dados de pacotes:
apt-get updateEntão, instalamos todos os pacotes necessários assim:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential3.2 Baixar As Fontes do Kernel
Em seguida, baixamos o kernel desejado para /usr/src. Vá para www.kernel.org e selecione o kernel que deseja instalar, por exemplo, linux-2.6.21.3.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.21.3.tar.bz2Então, descompactamos as fontes do kernel e criamos um symlink linux para o diretório das fontes do kernel:
tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux3.3 Aplicar Patches Nas Fontes do Kernel (Opcional)
Às vezes, você precisa de drivers para hardware que não é suportado pelo novo kernel por padrão, ou precisa de suporte para técnicas de virtualização ou alguma outra tecnologia de ponta que ainda não chegou ao kernel. Em todos esses casos, você precisa aplicar patches nas fontes do kernel (desde que haja um patch disponível…).
Agora vamos supor que você tenha baixado o patch necessário (eu o chamo de patch.bz2 neste exemplo) para /usr/src. É assim que você o aplica às suas fontes do kernel (você deve ainda estar no diretório /usr/src/linux):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1O primeiro comando é apenas um teste, ele não faz nada com suas fontes. Se não mostrar erros, você pode executar o segundo comando que realmente aplica o patch. Não faça isso se o primeiro comando mostrar erros!
Você também pode aplicar pré-patches do kernel às suas fontes do kernel. Por exemplo, se você precisar de um recurso que está disponível apenas no kernel 2.6.22-rc3, mas as fontes completas ainda não foram lançadas para esse kernel. Em vez disso, um patch-2.6.22-rc3.bz2 está disponível. Você pode aplicar esse patch às fontes do kernel 2.6.21, mas não ao kernel 2.6.21.1 ou 2.6.21.2, etc. Isso é explicado em http://kernel.org/patchtypes/pre.html:
Pré-patches são o equivalente a lançamentos alpha para Linux; eles vivem nos diretórios de teste nos arquivos. Eles devem ser aplicados usando a utilidade patch(1) ao código-fonte do lançamento completo anterior com um número de versão de 3 partes (por exemplo, o pré-patch 2.6.12-rc4 deve ser aplicado às fontes do kernel 2.6.11, não, por exemplo, 2.6.11.10.)
Portanto, se você quiser compilar um kernel 2.6.22-rc3, deve baixar as fontes do kernel 2.6.21 ( http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) na etapa 3 em vez do kernel 2.6.21.3!
É assim que você aplica o patch 2.6.22-rc3 ao kernel 2.6.21:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p13.4 Configurar O Kernel
É uma boa ideia usar a configuração do seu kernel de trabalho atual como base para o seu novo kernel. Portanto, copiamos a configuração existente para /usr/src/linux:
make clean && make mrproper
cp /boot/config-`uname -r` ./.configEntão, executamos
make menuconfigque traz o menu de configuração do kernel. Vá para Carregar um Arquivo de Configuração Alternativo e escolha .config (que contém a configuração do seu kernel de trabalho atual) como o arquivo de configuração:


Então, navegue pelo menu de configuração do kernel e faça suas escolhas. Quando terminar e selecionar Sair, responda à seguinte pergunta (Você deseja salvar sua nova configuração de kernel?) com Sim:

3.5 Compilar E Instalar O Kernel
Para compilar o kernel, execute estes comandos:
make all
make modules_install
make installAgora seja paciente, a compilação do kernel pode levar algumas horas, dependendo da sua configuração do kernel e da velocidade do seu processador.
3.6 Etapas Pós-Instalação
O novo kernel está agora instalado, mas ainda precisamos de um ramdisk para nosso novo kernel (caso contrário, o sistema provavelmente não inicializará!), e precisamos informar ao carregador de inicialização GRUB sobre nosso novo kernel.
Primeiro, fazemos isso:
depmod 2.6.21.3
apt-get install yairdEntão, criamos um ramdisk com o seguinte comando:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3A configuração do GRUB é muito fácil no Debian Etch. Tudo o que precisamos fazer é executar
update-grubIsso detectará o novo kernel e ramdisk e atualizará /boot/grub/menu.lst para nós.
Agora reinicie o sistema:
shutdown -r nowNo prompt de inicialização, selecione seu novo kernel (deve ser selecionado por padrão). Se tudo correr bem, ele deve iniciar com o novo kernel. Você pode verificar se está realmente usando seu novo kernel executando
uname -rIsso deve exibir algo como
2.6.21.3Se o sistema não iniciar, reinicie-o e selecione seu kernel antigo no prompt de inicialização. Você pode agora tentar novamente compilar um kernel funcional. Não se esqueça de remover a(s) estrofe(s) do kernel que não funcionou de /boot/grub/menu.lst.
4 Links
- Debian: http://www.debian.org
- Os Arquivos do Kernel Linux: http://www.kernel.org
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.