COMO: Compilar un Kernel en Ubuntu

COMO: Compilar un Kernel en Ubuntu

Esta es una pequeña guía para compilar un núcleo en Ubuntu. Está basado en una guía para compilar un núcleo en Fedora pero con algunos cambios para adaptarlo a esta otra distribución, y en parte me he basado en esta otra guía del portal que debéis considerar:

http://www.ubuntu-es.org/node/427

He querido realizar esta guía para los usuarios acostumbrados a otras distribuciones y que prefieren, como yo, hacer las cosas de forma más parecida a como lo hacían antes (para que sea menos traumático el cambio de sistema), con pasos más detallados y todo eso. Por tanto vienen comandos que en Ubuntu, como se puede consultar en la otra guía que he mencionado, pueden ser sustituidos por otros y que tal vez podrían simplificar el trabajo y hacerlo más rápido.

No pretendo hacer una guía con la "mejor" forma de compilar el núcleo, sino como he dicho una guía para compilar el núcleo "de una forma distinta".

Tampoco soy un experto en el asunto, de hecho hay comandos que no comprendo perfectamente qué es lo que hacen, pero estos son los pasos que yo he seguido y me ha funcionado.

1.- Obtener las herramientas necesarias:

apt-get install build-essential kernel-package

2.- Descargar la fuente del Kernel desde Kernel.org, concretamente de: http://www.kernel.org/pub/linux/kernel/v2.6/ .Descárgate un paquete que tenga extensión .gz y que no comience su nombre por patch para descargarte las fuentes del kernel completas.

3.- Cópiala en /usr/src y descomprímela:

cd /usr/src/
tar -xvzf linux-X.Y.ZZ.tar.gz

4.- Crear un enlace simbólico al directorio descomprimido de las fuentes (opcional)

ln -s linux-X.Y.ZZ linux

o

mv linux-X.Y.ZZ linux

5.- Obtener las herramientas para configurar el núcleo

apt-get install libncurses5-dev

6.- Ir al directorio de las fuentes

cd /usr/src/linux-X.Y.ZZ

7.- Ahora puedes coger tu vieja configuración e importarla al nuevo kernel si quieres. Para ello debes copiar el fichero config-A.BB.CC que estés usando (puede haber varios) de /boot a la carpeta /usr/src/linux-X.Y.ZZ que has creado, pero llamándolo .config

cp /boot/config-A.BB.CC /usr/src/linux-X.Y.ZZ/.config

8.- Ejecutar "make mrproper" dentro del directorio /usr/src/linux-X.YY.ZZ. No tengo ni idea de para qué sirve, pero venía en la guía de Fedora algooooo

make mrproper

9.- Ejecutar "make menuconfig" o "make oldconfig menuconfig" si vas a importar la configuración. En el segundo caso se tomará la configuración antigua para las opciones viejas, y se te preguntará sobre cada una de las nuevas opciones del Kernel. Usa ? para pedir ayuda, y a no ser que sepas bien lo que haces usa la opción por defecto (basta darle a ENTER o mirar cual de las opciones listadas aparece en mayúscula, como por ejemplo Y/n/? o N/y/?

make menuconfig 

o

make oldconfig menuconfig

10.- Tomes o no la configuración antigua, ahora te aparecerá el menú en el que puedes revisar las opciones o cambiar alguna más. Cuando termines, asegúrate de que grabas los cambios realizados.

11.- Ejecutar "make dep" para crear las dependencias.

make dep

12.- Ejecutar "make clean". Esto es poco recomendable si estás cambiando solo un par de opciones sobre un kernel que ya has compilado antes porque tardará muchísimo luego en recompilar todo, ya que borrará todos los .o que ya estuviesen compilados. En definitiva este comando "borra toda la basura" según decía la guía de Fedora.

make clean

13.- Ejecutar "make bzImage" para crear la imagen del kernel. Tardará un poquillo.

make bzImage

14.- Copiar la imagen del kernel bzImage y los maps al directorio /boot

cp System.map /boot/System.map-X.Y.ZZ-identificador
cd /usr/src/linux-X.YY.ZZ/arch/i386/boot
cp bzImage /boot/vmlinuz-X.Y.ZZ-identificador
cd /usr/src/linux-X.Y.ZZ

Asegúrate que llamas a los archivos en /boot de con una identificación idéntica. Puedes llamarlos por ejemplo, para diferenciar con otros kernels, así:
System.map-2.6.10-nuevo y vmlinuz-2.6.10-nuevo
System.map-2.6.11.3-pruebas y vmlinuz-2.6.11.3-pruebas

15.- Ejecutar "make modules" para crear los modulos. Tardará bastante. En en un 400Mhz ha tardado entre 8-10 horas (para Fedora) las distintas veces que lo he ejecutado, mientras que en un 2.8Ghz no habrá tardado ni una hora en Ubuntu.

make modules

16.- Ejecutar "make modules_install" para instalar los modulos.

make modules_install

17.- Ejecutar "mkinitrd -o /boot/initrd.img-X.Y.ZZ-identificador X.Y.ZZ" que debe coincidir en su identificador con System.map y vmlinuz. Observa que el segúndo parámetro NO lleva el identificador, sino que debe coincidir con el nombre del directorio /lib/modules/X.YY.ZZ que contiene los módulos para tu nuevo kernel.

mkinitrd -o /boot/initrd.img-X.Y.ZZ-identificador X.Y.ZZ

18.- Editar la configuración de grub (o de lilo). La configuración de grub está en /boot/grub/menu.lst. Te bastará copiar uno de los bloques ya existentes y añadirlo al final con las modificaciones pertinentes para que se adapte a tu sistema. Un ejemplo sería:

title Ubuntu, kernel 2.6.11.3-pruebas
root (hd0,2)
kernel /boot/vmlinuz-2.6.11.3-pruebas root=/dev/hda3 ro quiet splash
initrd /boot/initrd.img-2.6.11.3-pruebas
savedefault
boot

Y cuando hayas probado que funciona, podrás cambiar la línea default al valor adecuado para que arranque por defecto en esta nueva configuración. Ten en cuenta que si pones default 3 arrancará la cuarta opción de la lista, ya que default empieza a numerar con el 0.

19.- Ejecutar "depmod -a" (de preferencia para actualizar los modulos)

depmod -a

20.- Reiniciar el PC

21.- Disfrutar del nuevo kernel (esperemos que sí) algooooo

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

problemas

una pregunta... cuando ejecuto "make dep" me sale el siguiente mensaje:

***warning: make dep is unnecesary now

y si me los salto y escribo "make bzimage", sale:

make: *** No hay ninguna regla para construir el objetivo `bzimage'. Alto.

y no puedo continuar

por favor, si alguien me pude ayudar, estare muy agradecido

EL Warning no es malo, solo

EL Warning no es malo, solo es un Warning.

Y con el bzImage, fíjate que la I es mayúscula, no minúscula.

Saludos

Mmmm...

...Por ké no hay regla para construir el objetivo? es de lo ke se keja "make", fácil, revisemos el orden del punto 7 y el 8.
Echemos un ojo a lo ke hace "make mrproper":
Borra todos los archivos *.o de compilaciones anteriores, asegurando ke ninguna regla anterior interfiera en esta nueva compilación.
Borra los módulos y los objetos de los módulos.
Borra la versión si es ke existe como así también el bzImage y el vmlinux en el directorio raíz.
Borra las plantillas de documentos que no han de crearse explícitamente.
Borra el System.map y el ".config", auch! #%@!!.
Mmmm...entonces:
renombramos el .config para ke mrproper no lo borre!
pingusa:~# mv .config confy
pingusa:~# make -s mrproper (-s en silencio)
pingusa:~# mv confy .config
pingusa:~# make menuconfig
pingusa:~# make -s dep (sólo para versiones anteriores del 2.6.x)
pingusa:~# make -s bzImage (si lo keremos en nuestro disco)(véase zlilo - zImage)
pingusa:~# make -s modules && make -s modules_install (si el primero no falla se instalan)
pingusa:~# make -s install (se copian a /boot el vmlinuz,System.map y config, con suerte actualiza el gestor lilo o grub)
Y no estaría demás editar el archivo /usr/src/linux-2.x.x/Makefile agregando: EXTRAVERSION = -jaipauer1 (por ejemplo) para tener mayor control de las versiones ke vamos compilando, luego un 'uname -r' nos dará el nombre de nuestro kernel:
pingusa:~# uname -r
2.4.26-jaipauer1

Christian
--------------------------------------------------------------
La maldición es el único lenguaje que conocen mejor todos los programadores.

Error en .tmp_linux1

Que tal.

tengo un problemilla cuando intento compilar el kernel, todo va bien hasta que me sale el siguiente error:

LD .tmp_vmlinux1
net/built-in.o(.text+0x6885c): En la función `br_handle_frame_finish':
: undefined reference to `br_fdb_update'
net/built-in.o(.text+0x68b08): En la función `br_handle_frame':
: undefined reference to `br_fdb_update'
net/built-in.o(.text+0x6a8d6): En la función `br_stp_handle_bpdu':
: undefined reference to `br_fdb_update'
make[1]: *** [.tmp_vmlinux1] Error 1
make[1]: Leaving directory `/usr/src/linux-source-2.6.10'
make: *** [stamp-build] Error 2

El unico cambio que hice en el .config (version 2.6.10-6-686) fue habilitar el soporte para bridge ethernet.

si me pueden ayudar, gracias.

suerte algooooo

pregunta con xconf

Hola gente les cuento que cada vez que compilo el kernel lo destrozo jajajj bueno asi voy a aprender.... creo... la pregunta es si en un kernel 2.6.x.y.z yo uso el make xconf me mustra lo que ya esta en mi maquina compilado y funcionando... porque cuando hago el make menuconfig me sale por defecto y haycosas que yo no tengo y por eso me da fallas.... si no es asi como puedo hacer para que me tome las cosas que ya estan compiladas y funcionando... si es que se puede?
desde ya muchas gracias
sebas

pregunta con xconf

Hola gente les cuento que cada vez que compilo el kernel lo destrozo jajajj bueno asi voy a aprender.... creo... la pregunta es si en un kernel 2.6.x.y.z yo uso el make xconf me mustra lo que ya esta en mi maquina compilado y funcionando... porque cuando hago el make menuconfig me sale por defecto y haycosas que yo no tengo y por eso me da fallas.... si no es asi como puedo hacer para que me tome las cosas que ya estan compiladas y funcionando... si es que se puede?
desde ya muchas gracias
sebas

Imagen de Nevershine

Ta mu bien el COMO,siempre

Ta mu bien el COMO,siempre es bueno saber hacer las cosas de más de una manera. Una cosilla make mrproper lo que hace es borrar la configuración del kernel(es decir que si lo hubieras puesto un paso más adelante...)dejándolo todo "limpito",xD.

Uhhmmm

Interesante.

O sea, que si hubiese puesto el MrProper un paso más tarde... Jo! Que risas me habría pegado.

Gracias!

YO añadiría una cosa: La

YO añadiría una cosa:
La opción de instalar libqt3-mt-dev asín:
apt-get install libqt3-mt-dev
Eso se haría cuando se instala libncurses5-dev. Así, en lugar de usar menuconfig, se podría usar xconfig, igual pero basado en X. A mi me gusta más el menuconfig, pero nunca se sabe.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.