Compilando um kernel linux pra outra máquina.

Pra que serve?

Explicação:

O procedimento de compilar um código fonte em uma plataforma para outra é chamado "cross-compiling", e no caso do Kernel Linux é extremamente simples, basta fazer uso da opção "Processor family" durante o processo de configuração (make config ou make xconfig) selecionar a plataforma alvo desejada, leia-se a plataforma para a qual você irá transplantar o kernel.

Observações:

  1. Quando você for compilar o kernel para a outra máquina, tenha em mente que você deverá adicionar suporte ao hardware da máquina a qual o novo kernel será colocado.
  2. Todos os comandos devem ser executados como root.
  3. Cuidado para não escrever os módulos da outra máquina em cima dos seus: use uma versão do kernel diferente da sua ou use a opção "Local version - append to kernel release", que adicionará uma terminação a versão do seu kernel e evitará a bagunça :P
  4. Por convenção, parto da premissa que você está usando o diretório /usr/src como local para o código fonte do kernel, e uso a versão kernel-versão para ser genérico

Pré-requesitos:

Procedimentos:

  1. Compile o novo kernel
    Compile o kernel para a outra máquina, utilizando a opção "Processor Family" com o processador devidamente selecionado, se você não acho a opção, siga o caminho:

    Processor type and features ---> Processor family (486)

    Se a máquina a qual tu for compilar o kernel for uma plataforma "exótica", tipo uma SGI altere a opção "Subarchitecture Type (PC-compatible)", o caminho para essas funções podem alterar com a versão do kernel que você está usando.

  2. Empacote os módulos
    Para ficar mais fácil de transportar de uma máquina pra outra, é melhor empacotar. Mas para aproveitar o pacote, copie a nova imagem para dentro do diretório dos novos módulos, execute:

    cp /usr/src/kernel-source/arch/i386/boot/bzImage /lib/modules/kernel-versão/

    E para empacotar tudo:

    tar -cf /lib/modules/versão-kernel.tar /lib/modules/versão-kernel

    Obs.: Se teu booloader necessita de uma imagem initrd, crie, copie pro diretório dos módulos e empacote junto.

  3. Transfira os módulos/imagem e desempacote
    Faça da forma que mais lhe convier, scp, nfs, cd, pendrive... mas coloque o versão-kernel.tar no diretório /lib/modules da máquina alvo, para desempacotar:

    cd /lib/modules ; tar -xvf versão-kernel.tar

  4. Copie a imagem pro /boot

    cp /lib/modules/versão-kernel/bzImage /boot/kernel-versão
    Obs.: Caso você tenha criado uma uma imagem initrd, também deve copiá-la pro /boot/

  5. Atualize seu bootloader
    Lembre-se, o caminho para a imagem é /boot/kernel-versão. Se todas os passos foram seguidos corretamente, você já pode reiniciar sua máquina e na hora do boot selecionar o novo kernel =)
    Obs.: Existem aplicações que na hora de compilar necessitam do código fonte, simplesmente empacote o diretório /usr/src/kernel-source, trasfira para a outra máquina e descompacte no diretório /usr/src.

Autor & Dúvidas