Como compilar ou recompilar o kernel do Linux

 

Para compilar o kernel do linux você vai precisar de:

Código fonte do kernel (Na sua distro provavelmente tem o fonte do kernel como um pacote, mas se vc quiser a versão mais atual, vá ao ftp do kernel.org ftp://ftp.br.kernel.org Até o presente momento a versão mais atual estável é a 2.4.20)

make (esse tem na sua distro)

gcc (esse também)

gzip ou bzip2

tar

 

O primeiro passo é instalar o fonte do kernel.

Se vc for usar um pacote da sua distro, procure por ele e instale-o, cada distro tem sua maneira específica de instalar pacotes. Agora se vc for usar o fonte baixado no kernel.org, faça o seguinte:

Dica: prefira sempre arquivos no formato .tar.bz2, pois são mais compactos.

Copie o arquivo que você baixou para o diretório /usr/src:

root@localhost />#cp /root/linux-2.4.20.tar.bz2 /usr/src/

(assumindo que você baixou o arquivo no formato .tar.bz2, para o diretório /root)

Desempacote e descompacte-o:

root@localhost />#cd/usr/src

root@localhost /usr/src>#tar jxvf linux-2.4.20.tar.bz2Erro! A referência de hyperlink não é válida.

root@localhost /usr/src>#tar zxvf linux-2.4.20.tar.gz

Feito isso será criado um diretório chamado linux-2.4.20, vc deverá criar um link simbólico para ele com o nome linux. Se já houver um diretório chamado linux, delete-o e depois crie-o novamente:

root@localhost /usr/src>#rm linux

root@localhost /usr/src>#ln -s linux-2.4.20 linux

Vá até o diretório linux:

root@localhost /usr/src>#cd linux

Agora é hora de configurar o kernel. Eu recomendo que você faça isso dentro do X, não importa em qual interface gráfica, pois é muito mais simples e intuitivo. Se vc estiver em modo texto e puder, entre no X:

root@localhost /usr/src/linux>#startx

e faça:

root@localhost /usr/src/linux>#make xconfig

Se quiser ou tiver que continuar em modo texto, faça:

root@localhost /usr/src/linux>make menuconfig

Se este não funcionar, tente:

root@localhost /usr/src/linux>make config (este não é muito bom, pois você vai ter que responder às coisas uma por uma. Os dois acima são bem mais intuitivos)

Bom, eu não vou explicar aqui como se faz para configurar o kernel. Talvez possa escrever um tutorial só sobre isso, mas aqui não vem ao caso.

Terminando de configurar seu kernel, salve e agora você vai compilar e criar as dependências necessárias:

root@localhost /usr/src/linux>make dep

Espere até o final do processo, quando o prompt aparecer novamente, vc vai criar a imagem compactada do kernel, imagem esta que será usada para dar boot no sistema:

root@localhost /usr/src/linux>make clean (este comando é opcional, mas altamente recomendado, pois limpa todo o lixo deixado por compilações anteriores, e não demora nem 10 segundos)

root@localhost /usr/src/linux>make bzImage

Este processo é um tanto quanto demorado, espere. Se você configurou algo como módulo e com certeza vc faz isso é hora de criar os módulos:

root@localhost /usr/src/linux>make modules

Agora você deve ir ao diretório /lib/modules:

root@localhost /usr/src/linux>cd /lib/modules

e dar uma olhada nele.

root@localhost /usr/src/linux>ls

É aqui que está a diferença entre compilar um novo kernel e recompilar o seu kernel atual. Se você estiver compilando um novo kernel, não precisa fazer nada aqui, mas se você estiver recompilando, é recomendado que você renomeie a pasta que contém seus módulos atuais para, se houver algum problema nesta nova compilação, você ter um backup do atual, que está funcionando. Digamos que você esteja usando atualmente o kernel 2.4.18. Deve haver um diretório chamado 2.4.18, ou, dependendo da sua distro, 2.4.18-alguma_coisa. Renomeie para old.2.4.18-alguma_coisa:

root@localhost /lib/modules>#mv 2.4.18-alguma_coisa old.2.4.18-alguma_coisa.

Agora volte para /usr/src/linux

root@localhost /lib/modules>#cd /usr/src/linux

Faça:

root@localhost /usr/src/linux>#make modules_install

para instalar os módulos.

Dê uma olhada novamente na pasta /lib/modules. Deve haver uma nova pasta com o nome do kernel que você acabou de compilar.

Bem, se você chegou aqui sem problemas, pode respirar fundo e dar um sorriso. A parte mais complicada (complicada??!) já passou.

Agora você deve configurar seu gerenciador de boot para carregar a imagem do seu novo kernel. Os dois gerenciadores de boot que existem para linux são o GRUB (Grand Unified Bootloader) e o LILO (LInux LOader).

Para qualquer um dos dois você deve copiar a imagem compactada do kernel para o diretório /boot. A imagem está localizada em /usr/src/linux/arch/i386/boot e se chama bzImage.

root@localhost /usr/src/linux>cp arch/i386/boot/bzImage /boot

Para o LILO:

vá até o diretório /etc:

root@localhost /usr/src/linux>cd /etc

edite o arquivo lilo.conf:

root@localhost /etc>#vi lilo.conf

ou

root@localhost /etc>#vim lilo.conf

Se você não souber utilizar o vi ou o vim, utilize o editor de texto de sua preferência. Isso não faz diferença.

Se você é leigo e não está familiarizado com os nomes das partições e dos hds no linux, vá até o final deste texto e leia uma breve explicação. Aqui vou assumir que você tem o linux instalado na segunda partição do primeiro hd na ide0.

Crie uma entrada assim

image=/boot/bzImage

            root=/dev/hda2

            label=Linux-novo

            read-only

Depois reinstale o LILO:

root@localhost /etc>lilo

Se tudo estiver ok, dê um boot e escolha a entrada Linux-novo.

Se você usa o GRUB, faça o seguinte:

vá ao diretório /boot/grub e edite o arquivo menu.lst. Existem versões diferentes do GRUB, portanto siga o padrão das entradas que já estão lá. Vai ser algo mais ou menos assim:

title Linux kernel novo kernel=(hd0,1)/boot/bzImage root=/dev/hda2

Pronto. Dê um boot e torça para dar tudo certo....Agora você já pode tirar onda com a galera do linuxdicas dizendo que compilou seu próprio kernel e está tudo ok. E, se quiser fazer uma doação para mim, na conta...brincadeira, esquece...hehe

 

Nomes de partições e hds no linux.

 

O linux é diferente do windows na hora de definir os nomes dos seus hds. Digamos que você tenha dois hds, o primeiro com uma partição primária com o windows instalado mais uma estendida com duas unidades lógicas e outras duas primárias, cada uma com uma distro linux, e o segundo hd só com uma partição e um drive de cd-rom. O primeiro hd está na ide0 como master e o segundo com slave e o cd-rom na ide1 como master. O windows reconheceria assim:

c: - primeira partição do primeiro hd

d: - primeira unidade lógica da partição estendida

e: - segunda                                                       

As linux não seriam reconhecidas

o segundo hd seria f: e o cd-rom g:

No linux ficaria assim:

As partições são numeradas da seguinte maneira.

/dev/hda1 primeira partição do primeiro hd

/dev/hda2 partição estendida

     /dev/hda5 primeira unidade lógica da partição estendida

     /dev/hda6 segunda unidade lógica da partição estendida

/dev/hda3 primeira partição linux no GRUB seria (hd0, 2)

/dev/hda4 segunda partição linux no GRUB seria (hd0,3)

/dev/hdb segundo hd

/dev/hdc cdrom (na verdade existe um link simbólico chamado /dev/cdrom que aponta para o local onde o cdrom está instalado)

 

Espero ter sido claro nas minhas explicações. Qualquer dúvida me contate por email. Terei prazer em responder a quaisquer perguntas e/ou ouvir reclamações e sugestões.

Meu email: brunouff@yahoo.com.br