A pesar de lo que mucha gente cree, recompilar el kernel hoy en día no es excesivamente complicado. Además de esto en ciertas ocasiones puede ser necesario, por ejemplo, para poder instalar un módulo que necesitamos y que no viene incluido en el kernel (véase artículo relacionado).
Bueno, comenzamos, como siempre, instalando todos los paquetes necesarios para la compilación del kernel.
sudo apt-get install linux-kernel-devel linux-source build-essential pkg-config ncurses-dev qt3-apps-dev qt3-assistant qt3-designer qt3-dev-tools qt3-doc qt3-qtconfig
acto seguido descomprimimos el kernel en el directorio /usr/src
cd /usr/src
sudo tar xjf linux-source-2.6.22.tar.bz2
Y ahora tenemos que configurarlo (esto lo vamos a hacer de una forma realmente sencilla) : tecleamos
cd linux-source-2.6.22
make xconfig
y nos aparecerá un menú parecido a:
Abrimos (File>load) el fichero de configuración que se encuentra en /boot/config-2.6.22-14-generic y acto seguido lo guardamos como “.config”
a continuación ejecutamos en este orden.
sudo su
make ; make modules ; make modules_install ; exit
estos tres pasos suelen tomarse bastante tiempo aunque no necesitan ninguna atención, a no ser que algo haya ido mal.
Una vez terminado, copiamos el kernel recien compilado al directorio /boot
sudo cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.22
creamos su correspondiente fichero initrd
sudo mkdir /lib/firmware/2.6.22.9
sudo mkinitramfs -o /boot/initrd.img-2.6.22 2.6.22.9
Y por último sólo nos queda añadir en el fichero de configuración del grub el nuevo kernel.
sudo gedit /boot/grub/menu.lst
Nos vamos a la linea donde aparece por primera vez
title Ubuntu 7.10, kernel 2.6.22-14-generic
root (hd0,?)
kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=???????-????-????-????-?????????????? ro quiet splash
initrd /boot/initrd.img-2.6.22-14-generic
quiet
y añadimos justo antes:
title Ubuntu 7.10, kernel 2.6.22
root (hd0,?)
kernel /boot/vmlinuz-2.6.22 root=UUID=???????-????-????-????-?????????????? ro quiet splash
initrd /boot/initrd.img-2.6.22
quiet
(Notar que los caracteres marcados como ? son diferentes dependiendo de la instalación de cada uno, así que hay que copiar y pegarlo sin modificarlos)
Una vez finalizado todo esto ya podemos reiniciar el ordenador con el kernel nuevo. Recordar que ahora probablemente necesitemos recompilar para el nuevo kernel todos los módulos que teníamos antes.
Tags: 7.10, Gutsy Gibbon, kernel, Ubuntu
Nota: al estar compilando el kernel por nuestra cuenta podemos hacerlo utilizando directamente un fuente de la web kernel
Hola Alfredo,
una pequeña corrección. En la línea
sudo apt-get install linux-kernel-devel linux-source build-essential pkg-config ncurses-dev qt3-apps-dev qt3-assistant qt3-designer t3-dev-tools qt3-doc qt3-qtconfig
el paquete t3-dev-tools debe ser qt3-dev-tools.
Estoy siguiendo tus pasos para recompilar el kernel, a ver si me pilla la webcam. Ya te cuento.
Saludos
Pongo mi experiencia recompilando el kernel. En primer lugar decir que los pasos a seguir están bien claros y no he tenido ningún problema en el proceso de compilación. El problema está después. Con el kernel recompilado no me funciona nada: ni wifi, ni sonido, la configuración de la tarjeta de vídeo no va muy bien y de la webcam ni hablamos.
Quizás me falte el proceso de “recompilar para nuestro kernel todos los módulos que teníamos antes”. No se muy bien a qué te refieres. Yo hice un dpkg-reconfigure -a y tampoco. En fin, me resigno a lo de la webcam y sigo con el kernel que venía instalado. Al menos con él me funciona todo lo demás.
De todas formas, te felicito por el post pues lo que es el recompilado va bien. Además, en pocos sitios encuentras las cosas tan bien explicadas como aquí. Quizás haga falta un nuevo post para lo de los módulos.
Saludos
Pues yo, con mis cortas luces, a lo mejor puedo decir como se recompilan los módulos.
A lo mejor con esto (para cada módulo):
sudo module-assistant prepare
sudo module-assistant update
sudo module-assistant build
sudo module-assistant install
Y al terminar con lo anterior, esto:
sudo depmod -a
Y a lo mejor y todo funciona, jaja.
Pues yo, con mis cortas luces, a lo mejor puedo decir como se recompilan los módulos.
A lo mejor con esto (para cada módulo):
sudo module-assistant prepare
sudo module-assistant update
sudo module-assistant build “nombre_del_módulo”
sudo module-assistant install “nombre_del_módulo”
Y al terminar con lo anterior, esto:
sudo depmod -a
Y a lo mejor y todo funciona, jaja.
PD: Lo siento por replicar el comentario pero he puesto texto entre carácter menos y más y no me he acordado de hacerlo con el &noseque;
Y el prepare y update solo es suficiente hacerlo la primera vez, no hay que hacerlo para cada módulo.
Y en una sola lÃnea creo que se puede escribir:
sudo module-assistant build, install ânombre_del_móduloâ?
He intentado innovar un poco y he llegado (creo que sin errores, salvo algún warning) hasta el punto de:
“sudo cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.22″
Una vez llegados ahí, como tengo arquitectura 64 bits e instalé la versión de Ubuntu para esa arquitectura, así que cambié la línea por la siguiente:
“sudo cp arch/x86_64/boot/bzImage /boot/vmlinuz-2.6.22″
No funciona
He vuelto a dejar el menu.lst como estaba hasta nueva orden… pero tengo un kernel de más xD’
Espero que tengáis alguna respuesta para mi duda, yo ahora mismo tengo mucho trabajo que hacer y no puedo ponerme a probar mucha historia =P’
Si termino mis trabajos, ya me pondré y si consigo algo os lo pongo aquí.
Un saludo… ¡gracias por el tutorial!
PD. Para hacer “make xconfig” es necesario ser superusuario
que error te da? simplemente no funciona?
PD. Para hacer “make xconfig” realmente no es necesario ser superusuario. Todo depende del usuario que haya descomprimido el archivo con los fuentes del kernel. Lo mejor es que sea un usuario sin privilegios pero que pertenezca al grupo que tiene acceso a /usr/src
Disculpa, he estado atareado… sí, tienes razón con lo del make xconfig… el problema es que empecé haciendo sudo para todo (el conocido sudo-frenzy xD) y luego vue necesario el make xconfig.
He tenido que formatear para cambiar la tabla de particiones y he perdido la compilación del kernel, en cuanto tenga tiempo volveré a ello.
Era un kernel-panic al intentar cargarlo, pero ahora mismo no recuerdo exactamente qué decía. Lo siento. ¿Sabes entonces cómo debería haberlo hecho?
Muchas gracias!
Normalmente para la version de 32 bits no suele haber problemas siguiendo los pasos del post. Para la version de 64 bits ya no te puedo garantizar nada porque no lo he probado.
Lo del kernel panic… 90% seguro que tiene algo que ver con el initrd
Cuando tengas tiempo copia en una libreta el mensaje de error.
Como bien sabes en un sistema suficientemente complejo como puede ser un ordenador los motivos por los que algo puede estar fallando son infinitos (el mensaje de error siempre ayuda)
hola me puedes ayudar con esto me sale este error cuando digito el comando bzimage
In file included from /usr/src/linux-2.4.20/include/linux/smp_lock.h:21,
from init/main.c:24:
/usr/src/linux-2.4.20/include/asm/smplock.h: En la función ‘lock_mosix’:
/usr/src/linux-2.4.20/include/asm/smplock.h:88: aviso: ‘get_current’ es estática pero se usa en la función inline ‘lock_mosix’ la cual no es estática
/usr/src/linux-2.4.20/include/asm/smplock.h:89: aviso: ‘spin_lock’ es estática pero se usa en la función inline ‘lock_mosix’ la cual no es estática
/usr/src/linux-2.4.20/include/asm/smplock.h: En la función ‘unlock_mosix’:
/usr/src/linux-2.4.20/include/asm/smplock.h:94: aviso: ‘get_current’ es estática pero se usa en la función inline ‘unlock_mosix’ la cual no es estática
/usr/src/linux-2.4.20/include/asm/smplock.h:96: aviso: ‘get_current’ es estática pero se usa en la función inline ‘unlock_mosix’ la cual no es estática
/usr/src/linux-2.4.20/include/asm/smplock.h:97: aviso: ‘spin_unlock’ es estática pero se usa en la función inline ‘unlock_mosix’ la cual no es estática
init/main.c: En la función ‘start_kernel’:
init/main.c:361: aviso: el formato no es una cadena literal y no tiene argumentos de formato
make: *** [init/main.o] Error 1
me podrian ayudar les agradezco
Estas usando Ubuntu Gutsy? para x86? según tengo entendido no es necesario hacer nada aparte de seguir los pasos que especifiqué. La imagen del kernel compilado debería encontrarse en el directorio arch/i386/boot/
Podrías dar mas detalles del proceso que has seguido?
Es el kernel 2.4.20, lo de angy. Intuyo que no es gutsy.
Ahora sí. Te voy a hacer la primera pregunta seria de este post. ¿Para que sirve mkdir /lib/firmware/2.6.22.9?
No tengo ni idea. Y si no se hace ¿pasaría algo?
Algunos dispositivos como por ejemplo las tarjetas inalambricas necesitan un codigo que se ejecuta en el propio chipset de la tarjeta (firmware). Ese directorio lo que hace es albergar el fichero binario de dicho codigo. Si no lo creas, al instalar los modulos del kernel habrá dispositivos que no funcionen.
Error, http://localhost/wordpress/wp-content/uploads/2007/12/qconf1.png no existe como es lógico, no tengo en mi localhost esa imagen. Es más, ni tengo el apache funcionando.
“y nos aparecerá un menú parecido a:
qconf
Abrimos (File>load”
Si, esta clase de errores me salieron la ultima vez que tuve que arreglar un estropicio que me hizo wordpress. Tengo que modificar todos los enlaces rotos.
Hola Alfredo,
estoy intentando seguir los pasos que pones, pero solo escribir el primero de ellos, me dice que no encuentra el paquete linux-kernel-devel, y si lo quito, me pone que le falta el siguiente, tienes alguna idea de que puede pasar?
gracias
Toni: que distribución estás usando?