Você adquiriu um novo hardware mas o kernel atual não suporta ele, ou precisa acrescentar uma funcionalidade ao kernel que não vem por padrão.
É nessas horas que é necessário compilar um novo kernel para que o dispositivo seja reconhecido ou a nova funcionalidade possa ser usada por um software por exemplo.
Vou mostrar aqui como proceder para compilar um novo kernel no CentOS / Red Hat Linux.
Pré requisitos
Download da última versão do kernel do Linux
A última versão pode ser obtida diretamente pelo link http://www.kernel.org/pub/linux/kernel/v2.6/
Baixando o source do Kernel (no momento em que escrevo a última versão é a 2.6.30.5)
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.5.tar.bz2
Depois de feito o download, descompactar para o diretório /usr/src
tar jxvf linux-2.6.30.5.tar.bz2 -C /usr/src
... linux-2.6.30.5/virt/ linux-2.6.30.5/virt/kvm/ linux-2.6.30.5/virt/kvm/coalesced_mmio.c linux-2.6.30.5/virt/kvm/coalesced_mmio.h linux-2.6.30.5/virt/kvm/ioapic.c linux-2.6.30.5/virt/kvm/ioapic.h linux-2.6.30.5/virt/kvm/iodev.h linux-2.6.30.5/virt/kvm/iommu.c linux-2.6.30.5/virt/kvm/irq_comm.c linux-2.6.30.5/virt/kvm/kvm_main.c linux-2.6.30.5/virt/kvm/kvm_trace.c
Para facilitar as coisas, ir até o diretório /usr/src e criar um link simbólico para o código fonte chamado linux, ficando assim:
cd /usr/src ln -sf linux-2.6.30.5 linux
Resultado:
ls -al
drwxr-xr-x 3 root root 4.0K Sep 2 06:18 . drwxr-xr-x 13 root root 4.0K Aug 31 14:25 .. lrwxrwxrwx 1 root root 14 Sep 2 06:18 linux -> linux-2.6.30.5 drwxrwxr-x 22 root root 4.0K Aug 16 18:19 linux-2.6.30.5
Preparando o ambiente para compilar o Kernel
Para compilar o Kernel no Linux, o ambiente do SO precisa estar preparado, com o gcc, ncurses etc.
Se sua instalação do CentOS ou do RedHat foi a mínima, o ambiente de desenvolvimento não foi instalado, sendo necessário fazer agora, isto é simples com o utilitário Yum que já resolverá todas as dependências.
yum install gcc make bison ncurses-devel rpm-build
... Installed: bison.i386 0:2.3-2.1 gcc.i386 0:4.1.2-44.el5 ncurses-devel.i386 0:5.5-24.20060715 Dependency Installed: cpp.i386 0:4.1.2-44.el5 glibc-devel.i386 0:2.5-34.el5_3.1 glibc-headers.i386 0:2.5-34.el5_3.1 kernel-headers.i386 0:2.6.18-128.7.1.el5 libgomp.i386 0:4.3.2-7.el5 Updated: glibc.i686 0:2.5-34.el5_3.1 glibc-common.i386 0:2.5-34.el5_3.1 nscd.i386 0:2.5-34.el5_3.1
Compilando o kernel para CentOS ou RedHat
Antes de iniciar com o processo da compilação, é interessante limpar algum lixo que possa ter ficado.
make clean
Uma boa idéia é pegar os parâmetros de configuração do kernel que vem com o original e esse arquivo encontra-se no diretório /boot, vamos copiá-lo para a raiz do source do kernel e executar o menuconfig.
cd /usr/src/linux cp /boot/config-`uname -r` .config
Certifique-se de estar sempre no diretório /usr/src/linux.
Acessar o menu de configuração é a forma mais fácil de configurá-lo.
make menuconfig[singlepic id=30 w=320 h=240 float=]
Como essa é uma compilação customizada então fica a sugestão de adicionar uma tag personalizada para o kernel que resultará, para fazer isso, faça da seguinte forma:
- Na tela incial, vá ao menu General setup —>
- Selecione Local version – append to kernel release
Isto feito o kernel resultante terá uma Tag de identificação.
Essa é a hora de customizar as configurações de hardware do seu kernel.
Após feita essa configuração e adequação, é hora de sair do menu de configuração e iniciar a compilação.
Ao sair da configuração, será solicitado que você grave as alterações feitas. Responda Yes.
[singlepic id=34 w=320 h=240 float=]Agora é a hora mais aguardada… a compilação.
Execute o comando make rpm
make rpm
... HOSTLD scripts/kconfig/conf scripts/kconfig/conf -s arch/x86/Kconfig make clean set -e; cd ..; ln -sf /usr/src/linux-2.6.30.5 kernel-2.6.30.5fogonacaixadagua /bin/sh /usr/src/linux-2.6.30.5/scripts/setlocalversion > /usr/src/linux-2.6.30.5/.scmversion set -e; cd ..; tar -cz --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git -f kernel-2.6.30.5fogonacaixadagua.tar.gz kernel-2.6.30.5fogonacaixadagua/. ...
E dará início à compilação, vai demorar bastante tempo.
Término da compilação, sem erros:
... Wrote: /usr/src/redhat/SRPMS/kernel-2.6.30.5fogonacaixadagua-1.src.rpm Wrote: /usr/src/redhat/RPMS/i386/kernel-2.6.30.5fogonacaixadagua-1.i386.rpm ...
O kernel está compilado e foi gerado um .rpm para sua instalação.
Para confirmar que o kernel existe no formato rpm, execute o comando:
ls -alh /usr/src/redhat/RPMS/i386/
total 164M drwxr-xr-x 2 root root 4.0K Sep 2 11:45 . drwxr-xr-x 9 root root 4.0K Sep 2 10:39 .. -rw-r--r-- 1 root root 164M Sep 2 11:45 kernel-2.6.30.5fogonacaixadagua-1.i386.rpm
Pacote RPM do novo kernel (32 bits)
Estou disponbilizando aqui o kernel compilado e empacotado.
Instalando o novo kernel
Como foi gerado um RPM do kernel, sua instalação ficou bem simples.
rpm -ivh /usr/src/redhat/RPMS/i386/kernel-2.6.30.5fogonacaixadagua-1.i386.rpm
Preparing... ########################################### [100%] 1:kernel ########################################### [100%]
Confirmando que o novo kernel foi instalado.
ls /boot
config-2.6.18-128.el5 symvers-2.6.18-128.el5.gz config-2.6.30.5-fogonacaixadagua System.map-2.6.18-128.el5 grub System.map-2.6.30.5-fogonacaixadagua initrd-2.6.18-128.el5.img vmlinux-2.6.30.5-fogonacaixadagua.bz2 initrd-2.6.30.5-fogonacaixadagua.img vmlinuz-2.6.18-128.el5 lost+found vmlinuz-2.6.30.5-fogonacaixadagua
Criando o initrd para o novo kernel
Criar as dependências dos módulos:
depmod 2.6.30.5-fogonacaixadagua
É necessário criar um novo initrd para que o SO possa iniciar e pré-carregar os módulos de hardware necessário.
mkinitrd -v /boot/initrd-2.6.30.5-fogonacaixadagua.img 2.6.30.5-fogonacaixadagua
Caso o seguinte erro ocorra:
No module dm-mem-cache found for kernel 2.6.30.5-fogonacaixadagua, aborting.
Para contornar isso, utilizar o parâmetro --without-dmraid com o mkinitrd
mkinitrd --without-dmraid -v /boot/initrd-2.6.30.5-fogonacaixadagua.img 2.6.30.5-fogonacaixadagua
Editando o grub
Fase final, resta apenas editar o grub.conf para utilizar o novo kernel.
Com seu editor de textos favorito, adicione as seguintes linhas:
title CentOS (2.6.30.5-fogonacaixadagua)
root (hd0,0)
kernel /vmlinuz-2.6.30.5-fogonacaixadagua ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.30.5-fogonacaixadagua.img
O final do arquivo /boot/grub/grub.conf parecerá com o seguinte:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-128.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.30.5-fogonacaixadagua)
root (hd0,0)
kernel /vmlinuz-2.6.30.5-fogonacaixadagua ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.30.5-fogonacaixadagua.img
Como primeiro boot, deixe a linha default=0 para testar, se o novo kernel inicilizar sem problemas é possível deixar default=1 para sempre utilizar o novo kernel num reboot.
Testando um boot com o novo kernel
Reinicie o computador.
shutdown -r now
- Pressione uma tecla na tela de boot para entrar no menu de seleção de kernel
- Selecione o novo kernel configurado no Grub
- No final do boot é possível ver que o novo kernel iniciou normalmente

17 comments
Join the conversationClovis - 17/05/2010
Ola, Tentei compilar o kernel no meu centos como vc explica acima, durante o processo não deu nenhum erro depois no reboot Kernel Panic, baixei o rpm que vc disponibilizou e funcionou o que fiz de errado.
Daniel Kühl Lima - 17/05/2010
Oi Clovis,
Edita o arquivo .config e coloque y para o parâmetro CONFIG_SYSFS_DEPRECATED_V2
Ficando assim:
CONFIG_SYSFS_DEPRECATED_V2=y
Clovis - 17/05/2010
Testei e funcionou, estava bem complicado fazer funcionar. Valeu, muito obrigado tambem pela resposta rapida.
Clovis - 18/05/2010
Cara você sabe me dizer qual opção que configuro para ter os drivers de integração com Hyper-v, estou compilando a versão 2.6.32.12
Farzin - 04/07/2010
hi i have tried this on a xen vps , centos 5.5 64 bit , 2.6.18-194.8.1.el5xen , but it failed in the last steps ,
No module xenblk found for kernel 2.6.34
i have searched and tried the following commands with no result :(
mkinitrd -v –with=xenblk –omit-scsi-modules –omit-raid-modules …
mkinitrd -v –preload=xenblk –omit-scsi-modules –omit-raid-modules …
any ideas ? thanks for this great post. :X
Daniel Kühl Lima - 04/07/2010
Hello,
You need to have those rpm installed:
kernel-xen-devel.x86_64
kernel-xen.x86_64
To install, execute the following command:
yum install kernel-xen-devel.x86_64 kernel-xen.x86_64
Thanks for your comment!
Farzin - 10/07/2010
i have installed these 2 rpm s , but no changes , still the error is comung up :( anyway thanks for your fast reply.
Sebuba - 27/07/2010
Olá, Parabéns pelo artigo.
Estou tendo problemas com o IPTABLES,alguns módulos como nat etc, não carregam.
Sabe qual módulo que preciso ativar no menuconfig para funcionar?
[]’s
Marcos - 29/12/2010
Olá Grande !
Primeiramente venho parabenizá-lo pelo seu artigo.
Sou novato no linux, fiz o passo a passo só que na hora do reboot me surgiu a seguinte mensagem – “Kernel panic – not syncing: Attempetd to kill init !”
Se puder me ajudar, desde já agradeço.
Att,
Marcos
Daniel Kühl Lima - 06/02/2011
Olá,
O que você pode fazer é editar o arquivo .config no diretório /usr/src/linux-xxx e procurar pela linha:
CONFIG_SYSFS_DEPRECATED_V2=y
E definir o valor para y, conforme acima.
Sucesso!
Bruno - 11/08/2011
Cara, apaguei o meu diretorio /lib/modules eu uso Centos o que eu faco?
Daniel Kühl Lima - 11/08/2011
Veja qual é o kernel ativo com o comando uname -a e então baixe o kernel no repositorio do CentOS e instale-lo com o comando rpm -iUvh kernel.rpm –force.
Isto restaurará os arquivos no /lib/modules/versao-do-kernel.
Valeu
Bruno - 11/08/2011
rsrs achei q ninguem ia responder
ai eu ja tinha seguido a receita de cima.
Depois q reiniciar ele nao vai dar nenhum problema?
( ainda nao reiniciei pq é o Firewall da empresa).
Daniel Kühl Lima - 11/08/2011
aeouahe :)
Se você instalou um kernel do repositório oficial do CentOS (defaul) .
Como você não disse se é 32bits ou 64bits nem qual a versão do CentOS, estou considerando ser a 5.6.
O kernel 32bits recomendo baixar esse aqui:
http://centos.mirror.nexicom.net/5.6/os/i386/CentOS/kernel-2.6.18-238.el5.i686.rpm
Se for 64bits, baixa esse kernel
http://centos.mirror.nexicom.net/5.6/os/x86_64/CentOS/kernel-2.6.18-238.el5.x86_64.rpm
Instale com o comando que disse no comentário anterior:
32 bits:
rpm -iUvh kernel-2.6.18-238.el5.i686.rpm --force
64 bits:
rpm -iUvh kernel-2.6.18-238.el5.x86_64.rpm --force
Não esqueça de conferir no /boot/grub/grub.conf se o kernel está definido e é o padrão.
Seguindo esses passos é dificil acontecer algo errado (Não impossível) e o servidor retornará de um reboot.
Aceita um aviso? Reinicie esse servidor no final de semana, aí você terá tempo para intervir caso algo aconteça.
Marcos - 15/08/2011
Olá Grande !
Como sempre ajudando demais os amigos que buscam respostas e sempre as tem !
Com a saída do Kernel 3.0.1, gostaria de saber como faria para atualizar meu Centos 5.5 para o kernel 3.0.1, meu kernel é 2.6.18-194.32.1.el5.
Se puder me ajudar, desde já agradeço.
Att,
Marcos
Daniel Kühl Lima - 16/08/2011
Opa! Obrigado Marcos pelo gentil comentário :)
Pretendo fazer um sobre o kernel 3.0.x logo!
Valeu!
Eugenie Kanahele - 07/01/2012
Thanks, I’m always trying to find details about VPS providers.
Related Posts
Podman + MariaDB: Resolvendo “Error establishing a database connection” após reiniciar o servidor
Daniel K Lima 30/11/2025Converter espaços/tabs em um único caracter (um espaço ou vírgula etc) com sed
Daniel K Lima 02/06/2016Conveter novas (\n) linhas em vírgula ou espaço usando sed
Daniel K Lima 06/04/2016SARG 2.3.1 erro ao compilar no Fedora 14
Daniel K Lima 11/03/2011rootsh: Keylogger para CLI do Linux
Daniel K Lima 20/04/2010CLI: Converter um PDF para uma imagem
Daniel K Lima 06/04/2010