Recompilando o Kernel no Debian (e derivados)

Recompilando o Kernel no Debian (e derivados)

Muita gente já ouviu falar em compilação do kernel e muitas vezes foge do assunto como se fosse matéria exclusiva para geeks e conhecedores do sistema, porém, compilar o kernel em distribuições 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 não vêm habilitados por padrão e poupando até um pouco do precioso espaço no HD.

Antes de falar propriamente da compilação do kernel, é necessário ter pelo menos uma visão básica do que é o kernel e qual a necessidade de sua compilação. para isto, dou uma breve explicação, e deixo no final do artigo alguns links úteis para maiores informações a respeito.

O kernel é a peça de software principal do SO (sistema operacional) que controla o hardware e faz a interação entre os demais programas e a máquina. na maioria das distribuições linux, o kernel vem com as funções básicas de gerenciamento da máquina ativadas como padrão e o resto, respectivo ao suporte de certos tipos de hardware, como placas de rede, placas de som, etc. ativados como módulos, isto é, eles fazem parte do kernel, mas só são ativados se forem necessários. Assim, o sistema não carrega tudo no boot.

Afinal, você não tem instaladas dezenas de placas de rede, cada uma de uma marca diferente, de forma que não há necessidade de carregar o que você não usa. Apesar disso, se você decidir trocar sua placa de rede, ou colocar uma adicional, basta ativar o módulo que dá suporte à nova placa. Esta possibilidade de ativar apenas o que vai usar é justamente a grande vantagem de utilizar módulos.

Para quem teve todo o hardware da máquina ativado durante a instalação do sistema, não existe uma necessidade real de recompilar o kernel. Mesmo em casos onde algum dispositivo não está funcionando, existe a opção de baixar uma versão atualizada do kernel a partir do repositório da própria distribuição, que pode ser instalada de forma semi-automática.

Mas há quem goste de ter seu kernel mais enxuto, com tudo carregado no kernel diretamente, (e não através de módulos), o que gera um pequeno ganho de desempenho, embora muitas vezes só é perceptível quando o computador trabalha no limite.

À parte disto, sempre existem alguns dispositivos de hardware, que são muito recentes ou mais raros no mercado, que até têm suporte no kernel, mas por não ser muito comuns ou por ter seu suporte em desenvolvimento, não vêm ativados por padrão (nem como módulo), 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 versão mais recente do kernel, pois, com certeza terá um avanço com relação ao suporte que você precisa.

É importante lembrar que se você tem um computador muito velho, provavelmente não precisa instalar ou compilar a versão mais recente do kernel. Pelo contrário, como o suporte a hardware antigo e fora de uso é deixado para trás nas novas versões do kernel, provavelmente você precisará compilar um kernel 2.4.xx, em vez do mais atual 2.6.xx, que vem por padrão na maioria das distribuições.

Obviamente, utilizar um kernel 2.4.xx pode trazer alguns problemas de compatibilidade com certos softwares e algumas complicações na hora da compilação. Se você tem uma máquina antiga e necessita de um kernel 2.4.xx, recomendo que tente utilizar uma distribuição linux como DSL (Damn Small Linux), que tem como foco a utilização em computadores antigos e/ou com poucos recursos, que já vem com kernel 2.4.xx (com patches que permitem suporte a hardware novo também), antes de se complicar com a compilação deste.

Lembre-se sempre de que antes de compilar o kernel é bom conhecer bem o hardware do seu computador. Isso não se resume a modelos de placas de rede, placa mãe e outros: você também precisa saber qual é o chipset da sua placa mãe e as funções que aquele modelo de placa tem ativado, já que no mercado, existem muitas placas mais simples, que usam a mesma base das completas, porém “castradas” em alguns recursos (e isso se aplica a quase todos os componentes de hardware).

De qualquer maneira, se você ainda está em dúvida, mas está tudo funcionando, a dica é deixar do jeito que está. Quem sabe, mais para frente você decide dar uma fuçada por esporte, afinal, se não der certo, você ainda pode usar o que está funcionando, e de quebra aprende alguma coisa nova. =P

Vamos então a compilação do kernel, propriamente dita:

Antes de começar, precisamos de alguns pacotes básicos, essenciais para o processo: o kernel-package, gcc e libncourses5-dev. Sem eles não será possível a compilação. para isto, abre o terminal e use os seguintes comandos para baixá-los via apt-get dos repositórios da distribuição (lembrando sempre que linhas iniciadas em “#” são para comandos como root (administrador) e linhas iniciadas em “$” são para comandos como usuário):

# apt-get update
# apt-get install kernel-package # apt-get install gcc # apt-get install libncurses5-dev

OBS: Algumas dependências serão instaladas automaticamente.

O kernel também pode ser baixado diretamente dos repositórios da sua distribuição 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 versão atual. Se você não souber qual é a versão atual, você pode consultar com o comando:

$ apt-cache search linux-source

Baixe também 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 versão 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 também utilizar também utilitários como o file-roller ou o Xarchiver):

# tar -vxjpf linux-source-2.6.xx.tar.bz2 -C /usr/src

Acesse o diretório linux-source-2.6.xx que foi criado. Todos os comandos a seguir são executados dentro dele.
OBS-2: Se você quiser usar as configurações do seu kernel atual no novo kernel que está prestes a compilar, faça o seguinte:

# cp /boot/config-2[pressione TAB].config # make oldconfig

Carregar as configurações 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 parâmetros do kernel surgirá:

index_html_ma3b3fa1

Esta parte é importante, pois você deve saber o que fazer e conhecer seu hardware, afim de não carregar drivers desnecessários ou esquecer os fundamentais para o funcionamento da máquina. Em caso de dúvidas a respeito, você sempre pode consultar o manual da sua placa-mãe e o bem conhecido Google que pode fornecer muitas informações valiosas.

Não 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 opção de voltar a inicializar através dele e remover o kernel compilado em caso de problemas.

Antes de mais nada, acesse a opção “general setup”, que será aberta em um menu separado. Logo na primeira opção “( ) Local version – append to kernel release”, você deve colocar um nome personalizado para seu kernel, afim de não acabar com mais de um kernel com o mesmo nome, o que pode gerar problemas mais tarde.

index_html_mbf12ca4

No meu caso, coloquei “-teste” na opção, o que faria com que meu kernel final (estou usando a versão 2.6.22) fique com o identificador “2.6.22-teste”.

Uma boa dica na hora de configurar, é ver os módulos que estão rodando no kernel atual. isto pode tirar muitas dúvidas quanto às configurações de drivers para o seu hardware. Como sempre, o manual da placa-mãe e o Google podem ser ajudantes valiosos nessa hora =P

Você pode conferir os módulos ativos com o comando:

$ lsmod

Tendo os nomes dos módulos ativos em mãos, você pode apertar a tecla “/” em qualquer ponto do menuconfig que isto abrirá uma busca onde você poderá colocar o nome do módulo e achar o local onde você poderá configurar esta opção.

No meu caso, entre os módulos que me retornou o comando “lsmod”, há um chamado snd-via82xx, digito então “/”, 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.

index_html_5eb50a42

Sigo o caminho descrito em “Location:” e chego no item descrito, onde posso ver uma descrição completa, selecionando o opção “help” na parte de baixo da janela.

index_html_21d5af3e

A ajuda confirma que este é o driver para a placa de som on-board do chipset VIA da minha placa mãe, que é exatamente aquele que eu preciso. Assim, seleciono este e desmarco os outros drivers de som, que não são necessários para meu computador.

index_html_6967d397

Este processo pode demorar, especialmente se você ainda não tem um bom conhecimento do seu hardware, ou se você ainda não está ambientado com o menuconfig, de qualquer modo, se sentir que está muito pesado, você pode salvar o seu progresso através da opção no menu principal e continuar em outro momento.

index_html_m4c05d78a

Quando terminar de alterar tudo que precisa e achar que está tudo do jeito que deveria estar, salve a configuração 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 máquina, bastante, então pode aproveitar este momento para ir tomar um cafezinho.

Ao terminar, saia do diretório atual:

$ cd ..

E instale seu kernel:

# dpkg -i linux-image-2[pressione TAB]

Pronto! Nem nas configurações do gerenciador de boot terá de mexer, pois o Debian faz para você. Reinicie seu computador e verifique se o novo kernel foi incluído no menu de boot e se o sistema pode ser inicializado através 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 opção “remove” do apt-get, como em:

# apt-get remove –purge linux-image-2.6.xx

… substituindo “xx” pela versão 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ê não pode remover o novo kernel enquanto ele está sendo executado. É necessário primeiro reiniciar e voltar a usar o kernel anterior.
Se deu tudo certo, pode apagar a pasta linux-source-2.6.xx, pois não será mais usada.

Caso queira fazer novas alterações no kernel que compilou, descompacte novamente o pacote linux-source-2.6.21.tar.bz2 (não use a pasta anteriormente criada com os sources, pois isto trará erros com a versão na hora de criar o pacote) e siga os mesmos passos novamente. Não se esqueça de personalizar a versão do kernel para não 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
Agora é só reiniciar no novo kernel.

E não se esqueça, toda vez que compilar um kernel diferente, terá que compilar módulos 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 módulo do driver proprietário da Nvidia e o módulo de paravirtualização que vem ativado no kernel padrão, 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 opção “processor type and features” do menu principal no menuconfig que você achará esta opção para desativá-la.

index_html_245faced

Porém, quem usa VMware e ferramentas de virtualização similares, provavelmente precisará manter este módulo ativado. Existe uma maneira de contornar este problema e manter ambos funcionando juntos, porém este é tema para outro artigo, mas você pode encontrar bastante informação a respeito no Google e nos fóruns dedicados ao ambiente linux.

Espero que seja útil e do agrado de vocês.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X