Recompilando el kernel (Ubuntu Gutsy)

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:

qconf

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: , , ,

20 Responses to “Recompilando el kernel (Ubuntu Gutsy)”

  1. Alfredo dice:

    Nota: al estar compilando el kernel por nuestra cuenta podemos hacerlo utilizando directamente un fuente de la web kernel

  2. Alex dice:

    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

  3. Alex dice:

    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

  4. Titiritero dice:

    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.

  5. Titiritero dice:

    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;

  6. Titiritero dice:

    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â€?

  7. Namzug dice:

    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

  8. Alfredo dice:

    que error te da? simplemente no funciona?

  9. Alfredo dice:

    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

  10. Namzug dice:

    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!

  11. Alfredo dice:

    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)

  12. angy dice:

    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

  13. Alfredo dice:

    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/

  14. Alfredo dice:

    Podrías dar mas detalles del proceso que has seguido?

  15. Titiritero dice:

    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?

  16. Alfredo dice:

    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.

  17. Titiritero dice:

    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”

  18. Alfredo dice:

    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.

  19. toni dice:

    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

  20. Alfredo dice:

    Toni: que distribución estás usando?

Leave a Reply


+ 7 = 9