Você está na página 1de 10

Recompilando o Kernel no Debian (e derivados)

http://www.guiadohardware.net/dicas/recompilando-kernel-debian.html

Muita gente j ouviu falar em compilao do kernel e muitas vezes foge do assunto como se fosse matria exclusiva para geeks e conhecedores do sistema, porm, compilar o kernel em distribuies linux baseadas no debian, como o Kurumin e o Ubuntu, uma tarefa relativamente simples, que pode melhorar o desempenho do computador em geral, adicionando suporte a alguns tipos de hardware que no vm habilitados por padro e poupando at um pouco do precioso espao no HD. Antes de falar propriamente da compilao do kernel, necessrio ter pelo menos uma viso bsica do que o kernel e qual a necessidade de sua compilao. para isto, dou uma breve explicao, e deixo no final do artigo alguns links teis para maiores informaes a respeito. O kernel a pea de software principal do SO (sistema operacional) que controla o hardware e faz a interao entre os demais programas e a mquina. na maioria das distribuies linux, o kernel vem com as funes bsicas de gerenciamento da mquina ativadas como padro e o resto, respectivo ao suporte de certos tipos de hardware, como placas de rede, placas de som, etc. ativados como mdulos, isto , eles fazem parte do kernel, mas s so ativados se forem necessrios. Assim, o sistema no carrega tudo no boot. Afinal, voc no tem instaladas dezenas de placas de rede, cada uma de uma marca diferente, de forma que no h necessidade de carregar o que voc no usa. Apesar disso, se voc decidir trocar sua placa de rede, ou colocar uma adicional, basta ativar o mdulo que d suporte nova placa. Esta possibilidade de ativar apenas o que vai usar justamente a grande vantagem de utilizar mdulos. Para quem teve todo o hardware da mquina ativado durante a instalao do sistema, no existe uma necessidade real de recompilar o kernel. Mesmo em casos onde algum dispositivo no est funcionando, existe a opo de baixar uma verso atualizada do kernel a partir do repositrio da prpria distribuio, que pode ser instalada de forma semi-automtica. Mas h quem goste de ter seu kernel mais enxuto, com tudo carregado no kernel diretamente, (e no atravs de mdulos), o que gera um pequeno ganho de desempenho, embora muitas vezes s perceptvel quando o computador trabalha no limite.

parte disto, sempre existem alguns dispositivos de hardware, que so muito recentes ou mais raros no mercado, que at tm suporte no kernel, mas por no ser muito comuns ou por ter seu suporte em desenvolvimento, no vm ativados por padro (nem como mdulo), de forma que voc acaba precisando recompilar o kernel pra ativar o suporte (e quem sabe j aproveitar para fazer uma faxina ;). s vezes, o suporte que o kernel d quele hardware recente, ainda tem alguns bugs, e se torna interessante compilar uma verso mais recente do kernel, pois, com certeza ter um avano com relao ao suporte que voc precisa. importante lembrar que se voc tem um computador muito velho, provavelmente no precisa instalar ou compilar a verso mais recente do kernel. Pelo contrrio, como o suporte a hardware antigo e fora de uso deixado para trs nas novas verses do kernel, provavelmente voc precisar compilar um kernel 2.4.xx, em vez do mais atual 2.6.xx, que vem por padro na maioria das distribuies. Obviamente, utilizar um kernel 2.4.xx pode trazer alguns problemas de

compatibilidade com certos softwares e algumas complicaes na hora da compilao. Se voc tem uma mquina antiga e necessita de um kernel 2.4.xx, recomendo que tente utilizar uma distribuio linux como DSL (Damn Small Linux), que tem como foco a utilizao em computadores antigos e/ou com poucos recursos, que j vem com kernel 2.4.xx (com patches que permitem suporte a hardware novo tambm), antes de se complicar com a compilao deste. Lembre-se sempre de que antes de compilar o kernel bom conhecer bem o hardware do seu computador. Isso no se resume a modelos de placas de rede, placa me e outros: voc tambm precisa saber qual o chipset da sua placa me e as funes que aquele modelo de placa tem ativado, j que no mercado, existem muitas placas mais simples, que usam a mesma base das completas, porm "castradas" em alguns recursos (e isso se aplica a quase todos os componentes de hardware). De qualquer maneira, se voc ainda est em dvida, mas est tudo funcionando, a dica deixar do jeito que est. Quem sabe, mais para frente voc decide dar uma fuada por esporte, afinal, se no der certo, voc ainda pode usar o que est funcionando, e de quebra aprende alguma coisa nova. =P Vamos ento a compilao do kernel, propriamente dita: Antes de comear, precisamos de alguns pacotes bsicos, essenciais para o processo: o kernel-package, gcc e libncourses5-dev. Sem eles no ser possvel a compilao. para isto, abre o terminal e use os seguintes comandos para baix-los via apt-get dos repositrios da distribuio (lembrando sempre que linhas iniciadas em "#" so para

comandos como root (administrador) e linhas iniciadas em "$" so para comandos como usurio): # apt-get update
# apt-get install kernel-package # apt-get install gcc # apt-get install libncurses5-dev
OBS: Algumas dependncias sero instaladas automaticamente.

O kernel tambm pode ser baixado diretamente dos repositrios da sua distribuio via apt-get (que coloca o arquivo linux-source-2.6.xx.tar.bz2 na pasta /usr/src) com o comando: # apt-get install linux-source-2.6.xx ... substituindo "xx" pela verso atual. Se voc no souber qual a verso atual, voc pode consultar com o comando: $ apt-cache search linux-source Baixe tambm o linux-headers e linux-kbuild:
# apt-get install linux-headers-2.6.xx # apt-get install linux-kbuild-2.6.xx

importante lembrar que a verso dos dois pacotes precisa ser a mesma que o source. Feito isto, v at a pasta onde est o source: $ cd /usr/src E descompacte-o com o comando a seguir (voc pode tambm utilizar tambm utilitrios como o file-roller ou o Xarchiver): # tar -vxjpf linux-source-2.6.xx.tar.bz2 -C /usr/src Acesse o diretrio linux-source-2.6.xx que foi criado. Todos os comandos a seguir so executados est prestes a compilar, faa o seguinte:
# cp /boot/config-2[pressione TAB] .config # make oldconfig

dentro

dele.

OBS-2: Se voc quiser usar as configuraes do seu kernel atual no novo kernel que

Carregar as configuraes atuais um passo opcional, mas recomendo que as utilize. Agora vamos ao que interessa. Rode o menuconfig com o comando:

# make menuconfig O configurador com os parmetros do kernel surgir:

Esta parte importante, pois voc deve saber o que fazer e conhecer seu hardware, afim de no carregar drivers desnecessrios ou esquecer os fundamentais para o funcionamento da mquina. Em caso de dvidas a respeito, voc sempre pode consultar o manual da sua placa-me e o bem conhecido Google que pode fornecer muitas informaes valiosas. No tenha medo de errar, no pior dos casos, voc ir perder tempo e nada mais, j que seu o kernel atual vai continuar instalado e voc sempre ter a opo de voltar a inicializar atravs dele e remover o kernel compilado em caso de problemas. Antes de mais nada, acesse a opo "general setup", que ser aberta em um menu separado. Logo na primeira opo "( ) Local version - append to kernel release", voc deve colocar um nome personalizado para seu kernel, afim de no acabar com mais de um kernel com o mesmo nome, o que pode gerar problemas mais tarde.

No meu caso, coloquei "-teste" na opo, o que faria com que meu kernel final (estou usando a verso 2.6.22) fique com o identificador "2.6.22-teste". Uma boa dica na hora de configurar, ver os mdulos que esto rodando no kernel atual. isto pode tirar muitas dvidas quanto s configuraes de drivers para o seu hardware. Como sempre, o manual da placa-me e o Google podem ser ajudantes valiosos nessa hora =P Voc pode conferir os mdulos ativos com o comando: $ lsmod Tendo os nomes dos mdulos ativos em mos, voc pode apertar a tecla "/" em qualquer ponto do menuconfig que isto abrir uma busca onde voc poder colocar o nome do mdulo e achar o local onde voc poder configurar esta opo. No meu caso, entre os mdulos que me retornou o comando "lsmod", h um chamado snd-via82xx, digito ento "/", que me leva busca. Digito "via82xx" e ele logo me retorna alguns resultados, onde facilmente encontro o driver para meu dispositivo e o caminho completo para ach-lo no menuconfig.

Sigo o caminho descrito em "Location:" e chego no item descrito, onde posso ver uma descrio completa, selecionando o opo "help" na parte de baixo da janela.

A ajuda confirma que este o driver para a placa de som on-board do chipset VIA da minha placa me, que exatamente aquele que eu preciso. Assim, seleciono este e desmarco os outros drivers de som, que no so necessrios para meu computador.

Este processo pode demorar, especialmente se voc ainda no tem um bom conhecimento do seu hardware, ou se voc ainda no est ambientado com o menuconfig, de qualquer modo, se sentir que est muito pesado, voc pode salvar o seu progresso atravs da opo no menu principal e continuar em outro momento.

Quando terminar de alterar tudo que precisa e achar que est tudo do jeito que deveria estar, salve a configurao e saia do menuconfig. Em seguida, compile e crie um pacote .deb com seu novo kernel, que poder ser instalado via dpkg e que poder ser desinstalado mais tarde via apt-get: # make-kpkg --initrd kernel_image Esta parte ir demorar, dependendo da sua mquina, bastante, ento pode aproveitar este momento para ir tomar um cafezinho. Ao terminar, saia do diretrio atual: $ cd .. E instale seu kernel: # dpkg -i linux-image-2[pressione TAB] Pronto! Nem nas configuraes do gerenciador de boot ter de mexer, pois o Debian faz para voc. Reinicie seu computador e verifique se o novo kernel foi includo no menu de boot e se o sistema pode ser inicializado atravs dele sem erros. Em caso de problemas, basta reiniciar novamente e escolher o kernel antigo no menu de boot. No caso de algo dar errado, voc pode remover o kernel compilado usando a opo "remove" do apt-get, como em:

# apt-get remove --purge linux-image-2.6.xx ... substituindo "xx" pela verso que voc acabou de compilar. No meu caso o comando completo seria "apt-get remove --purge linux-image-2.6.22-teste" OBS-4: Voc no pode remover o novo kernel enquanto ele est sendo executado. necessrio usada. Caso queira fazer novas alteraes no kernel que compilou, descompacte novamente o pacote linux-source-2.6.21.tar.bz2 (no use a pasta anteriormente criada com os sources, pois isto trar erros com a verso na hora de criar o pacote) e siga os mesmos passos novamente. No se esquea de personalizar a verso do kernel para no ter problemas com nomes iguais. Se voc esqueceu de personalizar o nome do seu kernel no menuconfig, voc ainda pode faz-lo na hora de criar o pacote, substituindo o comando: # make-kpkg --initrd kernel_image por este: # make-kpkg --append-to-version "-nome-personalizado" --initrd kernel_image Criando assim o kernel-image-2.6.xx-nome-personalizado primeiro reiniciar e voltar a usar o kernel anterior. Se deu tudo certo, pode apagar a pasta linux-source-2.6.xx, pois no ser mais

Agora s reiniciar no novo kernel. E no se esquea, toda vez que compilar um kernel diferente, ter que compilar mdulos de drivers externos ao kernel novamente, como os drivers da Nvidia, por exemplo. Em kernels acima do 2.6.18, existe um problema de compatibilidade entre o mdulo do driver proprietrio da Nvidia e o mdulo de paravirtualizao que vem ativado no kernel padro, que na hora de compilar o driver da Nvidia retorna uma mensagem de erro similar a esta: LD [M] /usr/src/modules/nvidia-kernel/nv/nvidia.o > Building modules, stage 2. > MODPOST 1 modules > FATAL: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol 'paravirt_ops' > make[4]: *** [__modpost] Error 1 > make[3]: *** [modules] Error 2

> make[3]: Leaving directory `/usr/src/linux-headers-2.6.22-2-k7' > NVIDIA: left KBUILD. > nvidia.ko failed to build! Para resolver isto, basta entrar na opo "processor type and features" do menu principal no menuconfig que voc achar esta opo para desativ-la.

Porm, quem usa VMware e ferramentas de virtualizao similares, provavelmente precisar manter este mdulo ativado. Existe uma maneira de contornar este problema e manter ambos funcionando juntos, porm este tema para outro artigo, mas voc pode encontrar bastante informao a respeito no Google e nos fruns dedicados ao ambiente linux.

Você também pode gostar