Guia de tecnologias

Construir um kernel da forma tradicional

5 min read Kernel Atualizado 25 Sep 2025
Construir um kernel Linux manualmente
Construir um kernel Linux manualmente

Intenção primária e variantes de busca

  • Intenção: compilar e instalar um kernel Linux a partir das fontes
  • Variantes: construir kernel manualmente, compilar kernel Linux, aplicar patch no kernel, recuperar GRUB após falha de kernel, configurar kernel com menuconfig

3 Construindo um kernel do modo tradicional

Este capítulo descreve um método genérico que funciona em qualquer sistema Linux. Não é específico do Fedora; portanto, o resultado final não será um pacote RPM do kernel, mas um kernel pronto para boot.

3.1 Baixar as fontes do kernel

Baixe o tarball do kernel desejado para /usr/src. Visite https://www.kernel.org e escolha a versão requerida, por exemplo linux-2.6.18.2.tar.bz2 (a árvore 2.6 está em http://www.kernel.org/pub/linux/kernel/v2.6/). No sistema faça:

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

Descompacte as fontes e crie um link simbólico linux apontando para o diretório das fontes:

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

Nota: manter o link simbólico facilita compilações posteriores e scripts que assumem /usr/src/linux.

3.2 Aplicar patches nas fontes do kernel (Opcional)

Às vezes é necessário aplicar um patch para adicionar drivers, suporte a virtualização ou recursos em pré-lançamento. Suponha que você baixou patch.bz2 para /usr/src. Aplique assim (execute os comandos em /usr/src/linux):

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

O primeiro comando realiza um teste sem alterar as fontes; se não houver erros, execute o segundo para aplicar o patch. Se o teste falhar, não aplique o patch até corrigir o problema.

Existem também prepatches (equivalente a versões alfa). Por exemplo, para compilar 2.6.19-rc5 você pode baixar o patch-2.6.19-rc5.bz2 e aplicá-lo às fontes 2.6.18 (não a 2.6.18.1/2). Exemplo:

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

Important: prepatches são para teste; evite usá-los em produção sem validação completa.

3.3 Configurar o kernel

É recomendável basear a nova configuração na configuração do kernel atualmente em uso. No diretório /usr/src/linux:

make mrproper
cp /boot/config-`uname -r` ./.config

Em seguida execute o menu de configuração:

make menuconfig

No menu do kernel escolha Load an Alternate Configuration File e selecione .config (que contém a configuração do kernel atual). Navegue pelas opções, ative ou desative módulos conforme necessário e, ao sair, responda Yes para salvar a nova configuração.

Tela de seleção do menuconfig

Carregar arquivo de configuração alternativo no menuconfig

Quando terminar, confirme salvar a configuração:

Confirmação para salvar a configuração do kernel

Dica rápida: habilite apenas os drivers que realmente precisa; módulos desnecessários aumentam tempo de compilação e superfície de ataque.

3.4 Compilar e instalar o kernel

Para compilar e instalar, execute:

make all
make modules_install
make install

A compilação pode levar horas, dependendo da configuração e da CPU. O comando make install normalmente também cria um initramfs/initrd e atualiza /boot/grub/menu.lst.

Edite /boot/grub/menu.lst para garantir que o novo kernel seja a entrada padrão (valor default = 0):

vi /boot/grub/menu.lst

Exemplo de menu.lst gerado:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu

title Fedora Core (2.6.18.2)
        root (hd0,0)
        kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18.2.img

title Fedora Core (2.6.18-1.2798.fc6)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-1.2798.fc6.img

Reinicie o sistema:

shutdown -r now

Depois do boot, verifique a versão do kernel em execução:

uname -r

Deve exibir algo como:

2.6.18.2

Recuperação se o sistema não iniciar

Se o sistema não subir com o novo kernel, reinicie e, quando vir a tela de boot do GRUB, pressione qualquer tecla para entrar no menu do GRUB:

Mensagem do GRUB pedindo qualquer tecla

Menu do GRUB com seleção de kernel

Selecione o kernel anterior e inicie. Corrija a configuração, recompile e teste novamente. Não esqueça de remover do /boot/grub/menu.lst a entrada do kernel que não funciona.

Lista de verificação por função

  • Administrador de sistemas:
    • Fazer backup de /boot, /etc/fstab e /boot/grub/menu.lst
    • Garantir acesso físico/console em caso de falha
    • Verificar espaço livre em /boot
  • Desenvolvedor/engenheiro de driver:
    • Confirmar compatibilidade do driver com a versão do kernel
    • Testar patches em ambiente isolado (VM)
  • Operador de produção:
    • Testar kernel em ambiente de pré-produção
    • Planejar janela de manutenção e rollback

Playbook rápido de recuperação (runbook)

  1. Reinicie a máquina.
  2. Na tela do GRUB pressione qualquer tecla para entrar no menu.
  3. Selecione o kernel estável anterior.
  4. Boot e verifique logs: dmesg, /var/log/messages, journalctl.
  5. Ajuste .config ou aplique/remova patches conforme erro.
  6. Recompile e instale novamente.
  7. Se necessário, remova a entrada inválida em /boot/grub/menu.lst.

Quando este método falha / alternativas

  • Você não terá um pacote do kernel para gerenciar via gerenciador de pacotes (RPM/DEB). Alternativa: use ferramentas de empacotamento (makedeb, make rpm) ou scripts de distro para gerar pacotes.
  • Para deploy em muitas máquinas, prefira construir um pacote nativo (RPM/DEB) ou usar repositório interno.
  • Se precisar de versões com backports de segurança e suporte a longo prazo, prefira kernels fornecidos pela distribuição.

Modelo mental e heurísticas

  • Mental model: construir um kernel é um pipeline: fontes → configurar → compilar → instalar → testar → iterar.
  • Heurísticas:
    • Comece a partir da configuração atual (.config).
    • Habilite drivers como módulos sempre que possível para reduzir tamanho e risco.
    • Use VMs para testar kernels experimentais.

Caixa de fatos (qualitativa)

  • Tempo de compilação: minutos a horas (dependendo do CPU e opções). Uma máquina moderna compila um kernel padrão em ~10–30 minutos; máquinas mais antigas podem levar horas.
  • Risco: kernels personalizados aumentam chances de regressão; valide em staging.

Fluxo de decisão (Mermaid)

flowchart TD
  A[Precisa de kernel personalizado?] -->|Não| B[Use kernel da distro]
  A -->|Sim| C[Tem patch/prepatch?]
  C -->|Sim| D[Aplicar patch e testar em VM]
  C -->|Não| E[Configurar a partir de .config atual]
  D --> F[Compilar em VM]
  E --> F
  F --> G[Testar boot]
  G -->|OK| H[Implantar]
  G -->|Falha| I[Entrar no GRUB; selecionar kernel antigo]
  I --> J[Corrigir configurações ou remover patch]
  J --> F

Casos de teste / Critérios de aceitação

  • O kernel compila sem erros (make all conclui com sucesso).
  • Módulos são instalados em /lib/modules/uname -r (verifique pasta correspondente à versão nova).
  • Sistema realiza boot e uname -r mostra a versão compilada.
  • Serviços críticos sob supervisão iniciam corretamente após boot.

Dicas de segurança e privacidade

  • Não compilar em hosts de produção sem testes: use ambiente isolado.
  • Mantenha backups de chaves e configurações. Alguns módulos expostos podem alterar comportamento do subsistema de segurança; revise opções como SELinux/AppArmor.

Sumário final

Compilar um kernel manualmente dá controle total sobre opções e drivers, mas exige testes e um processo de rollback bem definido. Use VMs para validar alterações, mantenha backups de /boot e do GRUB, e prefira empacotar o kernel se precisar distribuir para várias máquinas.

Links

Autor
Edição

Materiais semelhantes

Liberar espaço no iPhone sem excluir apps
Tutoriais

Liberar espaço no iPhone sem excluir apps

Instalar WireGuard em CentOS 8
VPN

Instalar WireGuard em CentOS 8

Liberar 24GB no Windows 10 após Threshold 2
Windows

Liberar 24GB no Windows 10 após Threshold 2

Motorista de entregas: como garantir renda estável
Logística

Motorista de entregas: como garantir renda estável

Como limpar o cache no Microsoft Edge
Navegadores

Como limpar o cache no Microsoft Edge

Como instalar My Family Cinema (fora do Play)
Streaming

Como instalar My Family Cinema (fora do Play)