Como eu compilo um kernel?

(Estas instruções consideram que estejamos instalando a versão 2.6.0 do kernel, considere trocar a versão - onde for citada - pela versão que você estiver tentando compilar. As instruções aqui elencadas são também específicas da arquitetura x86, o processo de construção/compilação de um kernel em outras arquiteturas podem variar).

  • Descarregue o código fonte a partir do índice da página http://kernel.org, que irá elencar as últimas versões. Caso esteja usando FTP, vá até ftp.kernel.org/pub/linux/kernel/[versão desejada] -- estes subdiretórios contém um arquivo vazio chamado LATEST_IS[versão] para te ajudar a encontrar a última versão. No sitio Kernel.org existe quase toda a coleção de fontes desde a versão 0.99 - caso você realmente seja um aventureiro.
  • Desempacote o código fonte em seu diretório pessoal. Caso você queira realizar muitas compilações e instalações de kernel(e outros coisas legais) você pode querer dar uma lida em "Uma Nota sobre /usr/src" no final desta página.
    1. tar xivf linux-2.6.0.tar.bz2
    2.  

    (troque xivf por xzvf caso tenha descarregado o .gz)
  • cd dentro do diretório linux. Agora você precisará configurar o kernel para selecionar as características que você queira/precise. Existem várias maneiras de fazê-lo:

    • a. make config
      Questões em linha de comando;
    • b. make oldconfig
      (Útil somente caso você tenha mantido um .config de uma compilação anterior). Como o mais recente kernel, o .config do kernel em execução é usado por padrão caso esteja disponível, então você normalmente não precisará desta característica).
    • c. make menuconfig
      (Inteface baseada em ncurses)
    • d. make gconfig
      (Interface gráfica baseada em GTK+)
    • e. make xconfig
      (Interface gráfica baseada em QT)
  • Agora podemos construir/compilar o kernel(para kernels mais antigos como 2.4.x é necessário construir as dependências com "make dep").
    1. make
    2.  
  • Espere. Quando terminado, terá construído tanto o kernel(bzImage) quanto os módulos(para kernels mais antigos como 2.4.x, você precisará executar "make bzImage; make modules")
  • Assuma o usuário root para instalar os módulos e o kernel. Tudo até este ponto pode e deve ser feito com um usuário comum, não existe qualquer necessidade de assumir o usuário root para compilar um kernel. Na verdade não é uma boa idéia fazer tudo como o usuário root porque o usuário root é muito poderoso, um único erro é suficiente para arruinar o seu sistema completamente.
  • Instale os módulos.
    1. make modules_install
    2.  
  • Instale o novo kernel
    1. make install
    2.  
  • Configure o bootloader:

    • Caso a sua distribuição use lilo:

      • Edite /etc/lilo.conf e adicione as seguintes linhas:
        1. image = /boot/vmlinuz-2.6.0
        2. label = 2.6.0
        3.  

        Copie também a sua linha root=/dev/??? aqui também.

      • + Execute /sbin/lilo, reinicie, e aproveite.
    • Caso a sua distribuição use grub:

      • Edite arquivo de configuração em /boot/grub/grub.conf ou /boot/grub/menu.lst:
        1. title=Linux 2.6.0
        2. root (hd0,1) # troque pelo seu root atual
        3. kernel /boot/vmlinuz-2.6.0 root=/dev/hda1
        4.  

    • A maioria das distribuições possuem rotinas de instalação que ligam um novo /boot/vmlinuz-[versão] para simplesmente vmlinuz, então você pode querer adicionar uma stanza como esta ao arquivo de configuração do grub:
      1. title=My very latest kernel install
      2. root (hd0,1) # troque pelo seu root atual
      3. kernel /boot/vmlinuz root=/dev/hda1
      4.  

      Isto te possibilitará iniciar o sistema com kernels novinhos para teste sem ter que constantemente editar as configurações do grub.

      Nota: Isto irá funcionar para o lilo também, mas você ainda terá que executar /sbin/lilo após cada instalação.

    Caso ocorra algum problema relacionado ao modversion(Símbolos terminado em _Rxxxxxxxx) dê uma olhada nesta questão(ainda sem tradução para o português) no FAQ da lista de discussão linux-kernel para resolver o problema.

    Ainda não entendeu como compilar o seu kernel? Tente este tutorial mais detalhado(em inglês).