Compilar kernel em distros baseadas em Debian

Você está calmo hoje? Não se estressou? Então você poderá compilar seu kernel, pois requer muita paciência... Nesse artigo veremos o modo correto e mais prático de compilar em distribuições baseadas em Debian.

[ Hits: 35.740 ]

Por: Rafael Henrique da Silva Correia em 03/09/2007 | Blog: http://abraseucodigo.com.br


Não ta contente com o seu PC? Compile seu KERNEL!



Insatisfeito com o desempenho na inicialização do seu PC? Você queria tirar coisas, mas não sabe como? Bom, então vamos compilar seu kernel!

Como todos sabemos, quando adequamos um kernel ao SEU uso, seu PC agradece e você fica satisfeito, seu desempenho em termos de velocidade e segurança aumentam e muito. Então vamos parar de baboseira e vamos ao que interessa...

Primeiramente baixe a versão mais estável (The latest stable version of the Linux kernel) e nova do kernel em www.kernel.org.

Adquirida a nova versão iremos prosseguir com nossos passos:

Passo 1.

# apt-get update

Atualizaremos suas fontes de repositório para que os pacotes mais recentes sejam instalados.

Passo 2.

# apt-get install build-essential kernel-package libncurses5-dev tar gzip bzip2

Instalando pacotes necessários para a compilação do kernel:
  • build-essential - instala os pacotes mais usados para compilar programas que devem ser instalados;
  • kernel-package - pacote feito para "criarmos" pacotes de kernel em deb e instalarmos no Ubuntu de forma nativa (que pertença a ele por padrão);
  • libncurses5-dev - provê links, headers entre outros elementos da biblioteca libncurses5, que serve para rodar programas compilados por meio de ncurses;
  • tar, gzip e bzip2 - compactadores básicos do Linux.

Passo 3.

Descompacte o arquivo do kernel do Linux no diretório /usr/src:

# tar -xvjf linux-2.6.22.1.tar.bz2 -C /usr/src
# ln -sf /usr/src/linux-2.6.22.1 /usr/src/linux


O primeiro descompacta o arquivo linux-2.6.22.1 para a pasta /usr/src/linux-2.6.22.1. O segundo cria um link simbólico do seu novo kernel para a pasta linux, a criação deste link simbólico serve para que seu sistema e seus programas instalados consigam identificar que kernel você está usando.

Lembrando-se que quando construí este tutorial o kernel mais novo e estável do Linux estava em 2.6.22.1.

Passo 4.

# cp /boot/config-$(uname -r) .
# mv config-$(uname -r) .config


Passo 5.

Na quarta linha do arquivo /usr/src/linux/Makefile está a extraversion como .1, podemos editar o .1 colocando -20070715-c1 (data de trás para frente e -c1 significa compilação 1), para isso:

# vim /usr/src/linux/Makefile

E altere a 5ª linha do arquivo.

Pra que mudar esta linha?

Esta linha chamada extraversion nós mudamos pra efeito de organização, pois quando as configurações forem relativas a kernel, sempre após o nome e o versão do kernel será escrito um "nome", que é o que está escrito na extraversion. Por exemplo:

Quando o kernel for compilado, se listarmos nossos módulos de dispositivos instalados, poderemos ver que módulos pertencem a que compilação usando o comando:

# ls /lib/modules

Passo 6.

Vamos a compilação, agora ficou fácil vamos compilar o bichinho:

# make menuconfig

Agora escolha as opções que você quiser, não abordarei esta parte pois existem N computadores com N hardwares e N configurações de kernel boas.

Passo 7.

Agora vamos criar uma pacote .deb pra que fique mais fácil instalar e desinstalar seu novo kernel.

Limpando porcarias...

# make-kpkg clean

Criando e pacotes de acordo com a compilação...

# make-kpkg -initrd kernel_image kernel_headers

Agora vá tomar uns 30 litros de café porque este processo é super demorado!

Passo 8.

Agora que a imagem e o header foram gerados, simplesmente instale-os com o dpkg ;)!

# dpkg -i linux-headers-2.6.22.1-20070715-c1_i386.deb
# dpkg -i linux-image-2.6.22.1-20070715-c1_i386.deb


Os nomes dos arquivos de vocês podem ser diferentes, mas isso não muda nada.

Bom gente, terminado, agora só dêem um reboot e rezem, se deu erro voltem ao passo 6 e mãos a obra, e não se aborreçam, pois quando compilamos kernel às vezes não conseguimos ver tudo funcionando de primeira mesmo, mas isto é completamente normal.

Legenda:
  • # - executar como root
  • $ - executar como usuário normal (sem poderes administrativos)

    Próxima página

Páginas do artigo
   1. Não ta contente com o seu PC? Compile seu KERNEL!
   2. Considerações finais
Outros artigos deste autor

Configurando cliente na rede wireless com criptografia WPA - Debian

Usando HTTP autenticado no Apache

Problema resolvido: VMware Server 1.0.7 rodando no Debian Lenny Linux

Leitura recomendada

Linux (kernel) - A história do seu criador

Como compilar o Kernel em qualquer distribuição GNU/Linux

OpenVZ - Instalando no Debian Squeeze AMD64

Conheçendo o sistema operacional GNU/Fiwix

Compilando kernel com suporte a POM (path-omatic) e Layer7 no Debian e Slackware

  
Comentários
[1] Comentário enviado por tjpp em 03/09/2007 - 09:12h

Legal o artigo. Eu tenho algumas pequenas considerações a fazer:

Acho que faltou o exemplo no passo 5 (Por exemplo:)

Não entendi porque editar o Makefile, se o make-kpkg já tem as opções --revision e --append-to-version que fazem isto para você.

Como você disse que vai comentar em próximo artigo, o que retirar e o que manter, então só nos resta aguardar :-) , mas há muito tempo que não compilo o kernel (no máximo uso o module-assistant para webcam). O kernel Debian tem atualizações de segurança e mantendo módulos, mesmo que você não use, é legal pois você pode adicionar hardware sem precisar se preocupar com o mesmo.

[2] Comentário enviado por mautech em 03/09/2007 - 11:03h

kra muito bom artigo foi o que eu fiquei quebrando a kbca a madrugada de sabado td!! se voce puder me enviar um e-mail com seu icq ou msn para trocar-mos umas ideias agradeco muito!!! mau_root@yahoo.com.br

[3] Comentário enviado por adrianoturbo em 03/09/2007 - 12:24h

Compilando Kernel na mão que beleza e parabéns pelo excelente artigo.

[4] Comentário enviado por dzamin em 03/09/2007 - 13:22h

Aproveitando o assunto, gostaria de discutir com os colegas sobre a melhor forma de saber o que é ou não necessário na hora de compilar o Kernel. Na semana passada compilei o Kernel para o meu notebook porém, mesmo após eliminar uma série de parâmetros que eu não precisava, percebi que o tempo de boot continuou praticamente o mesmo (na verdade, uns 10 segundos mais demorado), e o meu objetivo principal, era deixar o Kernel enxuto e ganhar velocidade no boot da máquina. Passei horas verificando parâmetro por parâmetro, lendo a descrição de cada um deles, e no final não consegui alcançar o objetivo esperado. Gostaria de saber os comentários dos colegas sobre este fato e, se existe alguma documentação específica sobre o que tirar e/ou manter compilado no Kernel para ganhar performance. Também gostaria de saber se existe algum lugar onde é possível encontrar arquivos .config prontos para diferentes modelos de hardware, como notebooks por exemplo.

[5] Comentário enviado por carlogray em 03/09/2007 - 13:36h

Quando se compila o Kernel nao precisa adiciona-lo no grub ou lilo?

[6] Comentário enviado por dzamin em 03/09/2007 - 14:27h

O pacote .deb gerado pelo make-kpkg inclui os parâmetros necessários no gerenciador de boot!

[7] Comentário enviado por fernandoiury em 03/09/2007 - 16:06h

Bom artigo, bem explicado. Realmente o debian facilita muito a vida na hora de compilar o kernel.

Fernando Costa
Administrador de Sistemas
www.fernandocosta.eti.br

[8] Comentário enviado por rafaelhenrique em 04/09/2007 - 05:46h

tjpp o exemplo do passo 5 foi só pra ilustrar como os módulos do seu kenrle compilado ficariam organizados, poderia ser visto o "comentário" acrescido ao seu nome pelo comando "uname -r" também sem problemas, e eu preferi editar o Makefile justamente pelo que você falou todo mundo conhece os parâmetros do make-kpkg, e quem não conhece tem n tutoriais que compilam kernel com make-kpkg na internet ;) , mas obrigado pelas críticas muito bem pensado! Até mais! Abraço!

[9] Comentário enviado por rafaelhenrique em 04/09/2007 - 05:47h

mautech envie sua dúvida pra mim :) rafaelhenriqu@gmail.com

[10] Comentário enviado por rafaelhenrique em 04/09/2007 - 05:48h

dzamin o que você acha de criarmos um tutorial 2.0 pra este tópico? Eu também estou buscando melhores formas de compilar meu kernel!

[11] Comentário enviado por rafaelhenrique em 04/09/2007 - 05:50h

carlogray o dzamin respondeu corretamente :) qualquer dúvida conta comigo .... rafaelhenriqu@gmail.com

[12] Comentário enviado por marcosandre em 04/09/2007 - 11:08h

Muito bom o artigo, só tenho uma dúvida, pois não sou nenhum "expert": o que devo colocar no lugar do que está escrito "(uname -r)", e é assim mesmo com os parênteses? Valeu e obrigado..

[13] Comentário enviado por rafaelhenrique em 04/09/2007 - 13:22h

Oi marcosandre é o seguinte o comando:

#uname -r

Quando executado em um terminal retorna sua versão do kernel (ou seja o kernel que você está usando), ai quando queremos usar a saída de um comando pra outro comando executamos este comando desta forma $(uname -r) ou então entre crases `uname -r` ! :) blzinha?

Só dando um exemplo....

Ex: Eu quero remover todos os arquivos em formato txt (texto) da minha home...

# rm -rf $(ls -a *.txt)

Executados separadamente os comandos fazem as seguintes ações:

# ls -a *.txt
-Lista todos (ocultos ou não) os arquivos com final .txt
-Sua saída no meu pc é:

debian-etch-r1.txt foomatic.txt permissoes.txt

Agora é o seguinte o rm -rf exclui! Isso todos sabem, ai no caso ele excluirá a saída do ls -a sendo assim....

#rm -rf debian-etch-r1.txt foomatic.txt permissoes.txt

Desta forma! Só que usamos o ls -a pra não precisar ficar digitando o nome dos arquivos, por que tempo é dinheiro heheheh! Com o uname -r é a mesma coisa, jah pensou c toda vez que eu Rafael quando tivesse que falar minha versão do kernel tivesse que lembrar de 2.6.22.1-486 ? Daria trabalho né? Então eu uso o uname -r pra não precisar ficar digitando essa bagatela de números quando for precisar fazer referência ao meu kernel!

;) Entendido?

Qualquer dúvida pode perguntar !
Abraço!

[14] Comentário enviado por lipecys em 05/09/2007 - 13:07h

Kra, nunca compilei o kernel do meu PC, depois dessa vo até tentar.
valew.

[15] Comentário enviado por rafaelhenrique em 05/09/2007 - 14:28h

lipecys compila sim é legal :), desde que você tenha paciência por que o processo é demorado....

flw

[16] Comentário enviado por MorbiD em 06/09/2007 - 18:20h

um amigo meu teve problemas ao instalar o drive da nvidia no novo kernel (2.6.22.6) qndo ele compilou.
o novo kernel foi compilado e tals... mas o drive da nvidia não estava instalado nesse novo kernel. ele foi instalar o drive (do site da nvidia - onde este é compilado pra dentro do kernel) e nada... e dando boot no kernel antigo a tela fica branco.. não entra.

a solução dele foi reinstalar o ubuntu... sem instalar nada da nvidia... instalou o novo kernel... compilou o drive da nvidia e tudo funciona normalmente.

alguém tem alguma solução pra instalar o drive da nvidia no novo kernel sem q esse altera as configurações de outros kernel?

[17] Comentário enviado por rafaelhenrique em 08/09/2007 - 08:51h

MorbiD bom se fosse eu que estivesse nessa situação, eu primeiro removeria o conteúdo dos pacotes da nvidia por completo ( com apt-get remove --purge <pacote>) e depois tentaria compilar, por que pode ser que o drive pré-compilado esteja tomando o lugar do drive que você iria compilar, bom eu tentaria isso, mas é como digo tentaria, não sei se daria certo, porém acho mais viável

[18] Comentário enviado por Tilzao em 05/10/2007 - 09:46h

Este tutorial é 10, mas a demora é grande e o resultado final no meu caso foi quase imperceptível.
Valeu !

[19] Comentário enviado por rafaelhenriqu em 05/10/2007 - 21:39h

Tilzao é o seguinte esse tutorial é mais pra aprender a criar os pacotes na compilação e pra os iniciantes verem que compilação de kernel não é bicho de 7 cabeças, mas se você procura performance modifique o seu kernel de acordo com suas necessidades com o comando make menuconfig dentro da pasta /usr/src/linux ;) ai se você deixar ele realmente enxuto a performance melhora :), eu tenho um notebook pentium II que ficou show depois de uma compilação :)

Flww! E logo mais eu to pensando em criar um tutorial 2.0 deste mesmo, ensinando a adaptá-lo as suas necessidades!

[20] Comentário enviado por Tilzao em 18/10/2007 - 14:52h

Rafael o seu tutorial é muito bom e me ajudou bastante. Tive de recompilar o meu kernel por causa do Bootflash e aproveitei e dei uma enxugada nele e ai realmente melhorou.
Abaixo segue um link onde o autor dá varias dicas sobre o menuconfig, quem sabe ele não pode servir de fonte de inspiração para o seu tutorial 2.0 ?

http://br-linux.org/tutoriais/001804.html

Valeww

[21] Comentário enviado por Izavos em 06/12/2007 - 22:02h

Muito bom seu artigo!
Esclareceu minha duvida sobre como e se era possível compilar o kernel no ubuntu. Mas devo lhe dizer que não executei o passo "4º" até porque não entendi o mesmo. E tudo funciono muito bem, após algumas horas.O kernel que baixei foi o "2.6.23.9".O uso da memoria subio muito para uns 200MB (-+) mas não afectou o desempenho. E todo o hardware esta funcionando muito bem!
AT a próxima!

[22] Comentário enviado por rafaelhenrique em 07/12/2007 - 12:11h

Passo 4.
# cp /boot/config-$(uname -r) .
# mv config-$(uname -r) .config

O passo 4 funciona da seguinte forma...

O make-kpkg busca um arquivo chamado .config dentro do diretório /usr/src/linux e nas distros baseadas em Debian o sistema copia este arquivo .config pra dentro do /boot com o seguinte nome...

config-<nome do kernel>

Ou seja ele fica dentro do /boot com o nome config seguido da numeração do kernel atual, o que eu fiz no passo 4 foi copiar a configuração default do seu sistema e colá-la no lugar que você irá compilar, para que a compilação não altere seu sistema, deixe-o como ele está! Mas se preferir criar uma nova configuração (um novo .config) você poderá usar o make menuconfig dentro da pasta /usr/src/linux como exemplifiquei abaixo...

# cd /usr/src/linux
# make menuconfig

Aí é só começar a editar as configurações que você quer q seu kernel tenha, mas você TEM que saber o que está fazendo, não brinque com isso se não souber... qualquer coisa se quiser fazer isso e precisar de ajuda me manda email...

Até +


*obs: o comando uname -r mostra sua versão atual do kernel, eu o usei para que não fosse preciso ficar digitando o nome dele todo o tempo

[23] Comentário enviado por diegoppt em 20/03/2008 - 11:32h

muito bom seu tutorial cara!!
shalom

[24] Comentário enviado por edersg em 19/11/2008 - 23:02h

Muito boa noite Rafael e demais membros do portal Viva o Linux.

Rafael, gostaria de PARABENIZÁ-LO por disponibilizar o tutorial
de como compilar o kernel linux na maneira do Debian GNU/Linux.
Foi a primeira vez que utilizei esta forma de compilar o kernel linux.
Muito obrigado!

[root@jordan ~]# uname -a
Linux jordan 2.6.27-2008-11-19-c6 #1 SMP Wed Nov 19 21:21:32 BRST 2008 i686 GNU/Linux

Desejo-lhes uma
E X C E L E N T E
quinta-feira!

FÉ, SAÚDE e PAZ!

[25] Comentário enviado por rafaelhenrique em 23/11/2008 - 21:38h

Valew ederjordan fico feliz em poder ajudar :)
Abraço

[26] Comentário enviado por Rômega em 12/03/2009 - 18:41h

Muito bom o artigo, principalmente a parte dos "30 litros de café" iauhaiuhaaiu...

[27] Comentário enviado por caradepastel em 03/12/2009 - 14:34h

root@tavares-desktop:/usr/src/linux# make-kpkg -initrd kernel_image kernel_headers
exec debian/rules DEBIAN_REVISION=2.6.24organizado-10.00.Custom INITRD=YES kernel_image kernel_headers
====== making target debian/stamp/build/kernel [new prereqs: conf.vars]======
This is kernel package version 11.015.
test ! -f scripts/package/builddeb.kpkg-dist || mv -f scripts/package/builddeb.kpkg-dist scripts/package/builddeb
test ! -f scripts/package/Makefile.kpkg-dist || mv -f scripts/package/Makefile.kpkg-dist scripts/package/Makefile
/usr/bin/make ARCH=i386 \
bzImage
make[1]: Entrando no diretório `/usr/src/linux-headers-2.6.24-25-rt'
CHK include/linux/version.h
CHK include/linux/utsrelease.h
make[2]: *** Sem regra para processar o alvo `arch/x86/kernel/asm-offsets.c', necessário por `arch/x86/kernel/asm-offsets.s'. Pare.
make[1]: ** [prepare0] Erro 2
make[1]: Saindo do diretório `/usr/src/linux-headers-2.6.24-25-rt'
make: ** [debian/stamp/build/kernel] Erro 2
root@tavares-desktop:/usr/src/linux#

[28] Comentário enviado por rafaelhenrique em 04/12/2009 - 08:01h

caradepastel o kernel que você está usando é o 2.6.24-25 quando escrevi este artigo o kernel mais novo era o 2.6.22.1. Tenho que criar outro artigo mais atualizado, não testei este tutorial com o kernel que você está querendo compilar.

Até+

[29] Comentário enviado por Carlos_Cunha em 17/04/2013 - 21:45h

opa!
Se alguém estiver tendo dificuldade na hora de executar esse comando

make-kpkg -initrd kernel_image kernel_headers

que é o responsavel por gerar o ".deb", ele dizer que não conhece as opçõa -i -n etc..., isso ocorre pq falta um "-" ficando assim:

make-kpkg --initrd kernel_image kernel_headers

Pronto:

:-D

Apesar de antigo o tópico me foi muito util, obrigado

PS: nesse momento a compilação do kernel esta torando meu note hehehe

Abraço

[30] Comentário enviado por rafaelhenrique em 18/04/2013 - 08:06h

Obrigado pelo comentário PretooOO, esse tutorial está meio velhinho mesmo, talvez tenha mudado muita coisa.

Abraço!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts