Como compilar el kernel de ubuntu

Como compilar el kernel de ubuntu

(autor: Caribdis)



COMO COMPILAR EL KERNEL DE UBUNTU
Este documento se basa en el KernelHowto, publicado en inglés por steve en la wiki de Ubuntu: http://www.ubuntulinux.org/wiki/KernelHowto



Lo que yo he hecho ha sido traducirlo, resumiendo algunos puntos, ampliando otros y aclarando algunos otros. Y, por supuesto, comprobando que funciona. La compilación del kernel se hace a la manera Debian, es decir, con herramientas propias de esta distribución.



Así que vamos allá. Paso a paso.




1) OBTENER LAS HERRAMIENTAS NECESARIAS

Para compilar un kernel a medida vamos a necesitar los paquetes build-essential y kernel-package, por lo tanto:

bash:$ sudo apt-get install build-essential kernel-package

2) OBTENER LAS FUENTES DEL KERNEL

Las fuentes del kernel las podemos obtener de muchos sitios. El oficial, como todos sabeis es www.kernel.org
Pero también están en los repositorios de Ubuntu, y yo las he sacado de ahí, porque tiene algunas ventajas, como luego veremos.

En los repositorios de Ubuntu os vais a encontrar con paquetes llamados kernel-source y con paquetes llamados linux-source. Ambos son las fuentes del kernel. ¿Cuál es la diferencia?, pues que los kernel-source vienen de Debian, y los linux-source vienen de Ubuntu. Por lo tanto para obtener las fuentes del kernel que tenemos instalado y corriendo en nuestro sistema, sólo tendremos que hacer:

bash:$ sudo apt-get install linux-source

Con esto se descargará el archivo linux-source-nº_de_version.tar.bz2 en el directorio /usr/src (A partir de ahora asumiré que hemos descargado el linux-source-2.6.8.1, que es el que viene con Ubuntu warty)



Nos movemos a ese directorio:

bash:$ cd /usr/src

Si existe un enlace llamado linux a un kernel antiguo, lo borramos:

bash:/usr/src$ sudo rm linux

Ahora vamos a descomprimir el archivo de las fuentes:

bash:/usr/src$ sudo tar jxvf linux-source-2.6.8.1.tar.bz2

Esto creará un directorio llamado linux-source-2.6.8.1
Creamos un enlace simbólico (llamado linux) a ese directorio:

bash:/usr/src$ sudo ln -s linux-source-2.6.8.1 linux

3) CONFIGURAR EL KERNEL

Hay varias formas de configurar el kernel. Probablemente la mayoría de la gente utiliza una de estas dos: make menuconfig o make xconfig. La diferencia es que con make menuconfig no hace falta tener las Xwindow corriendo, y con make xconfig sí.

Nota: para utilizar make menuconfig necesitaremos el paquete libncurses5-dev (con todas sus dependencias) y para utilizar make xconfig necesitaremos el paquete libqt3-dev (con todas sus dependencias). Así que según lo que queramos utilizar, tendremos que hacer:

bash:/usr/src$ sudo apt-get install libncurses5-dev

o bien:

bash:/usr/src$ sudo apt-get install libqt3-dev

Una duda que siempre surge: para configurar el kernel, ¿puedo partir de una configuración conocida?. Pues la respuesta es que sí. Si tenemos, por ejemplo, instalado el kernel que trae Ubuntu por defecto (2-6-8-1-3-386 en mi caso), en el directorio /boot nos encontraremos con un archivo llamado config-2.6.8.1-3-386, y, ¿qué es ese archivo?, pues no es más que un archivo de texto con la configuración actual del kernel, por lo tanto, para partir de esa base y comenzar la configuración del nuevo kernel desde la actual, lo que tenemos que hacer es copiar dicho archivo al directorio /usr/src/linux-source-2.6.8.1, pero llamándolo .config, es decir:

bash:$ cd /usr/src/linux
bash:/usr/src/linux$ sudo cp /boot/config-2.6.8.1-3-386 .config

(lógicamente tendreis que cambiar los números de versión del kernel por los que se ajusten a vuestro caso particular).



Pues ahora ya podemos hacer (situados en el directorio /usr/src/linux) un sudo make oldconfig menuconfig o un sudo make oldconfig xconfig y modificar las opciones que queramos del kernel, es decir, configurarlo a nuestro gusto. Con mucho cuidado, eso sí, porque este es el paso crítico. Aquí es donde lo podemos arruinar todo si, por ejemplo, no incluimos algún módulo necesario para nuestro sistema.



4) CONSTRUIR EL PAQUETE DEL KERNEL

Para construir el paquete con el que instalaremos el nuevo kernel vamos a usar la orden make-kpkg. Esta orden lo que hace básicamente es sustituir a las clásicas make dep, make clean, make bzImage y make modules. Admite numerosas opciones y modificadores (ya sabeis: man make-kpkg), pero para lo que nos ocupa ahora sólo necesitaremos hacer lo siguiente:

bash:/usr/src/linux$ sudo make-kpkg clean
bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image

Lo único que teneis que modificar de la orden anterior es XXXX, que representa una secuencia alfanumérica que tendréis que decidir vosotros, y que se añadirá al número de versión del kernel para diferenciar el kernel que estais compilando de cualquier otro que ya esté instalado en vuestro sistema. Por lo tanto XXXX lo debereis sustituir por lo que querais, intentando no utilizar el guión de subrayado bajo (_) ni expresiones como "-386", "-606", "-K7", "-sparc", etc., porque expresiones similares son las usadas por los kernel precompilados de Debian y podrían inducir a error. Personalmente yo uso la fecha en la que compilo el kernel, de forma que si lo compilase hoy (19 de noviembre de 2004), mi orden querdaría así:

bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.191104 --initrd kernel_image

Ahora hay que hablar un poco sobre la opción --initrd
Esta opción lo que hace es crear una imagen initrd en el directorio /boot.
Realmente no es imprescindible utilizarla siempre que a la hora de configurar el kernel hayamos incluido de forma estática (y no como módulos) los controladores para al menos nuestro bus, disco y sistema de archivos de nuestro directorio raiz. Pero (y esto es sólo una experiencia personal) siempre que he intentado compilar un kernel sin esa opción, me he encontrado con un sistema que no arrancaba, así que yo la uso siempre. ¿Qué problema tiene?, pues que para que funcione correctamente la opción --initrd, hay que aplicar a las fuentes del kernel el parche cramfs. Tranquilos, porque todos los kernel de Debian (y por supuesto también los de Ubuntu) tienen ese parche ya aplicado. Pero es algo que tendréis que tener en cuenta si habeis obtenido las fuentes del kernel en algún otro sitio (por ejemplo en www.kernel.org).



Bien, como he dicho antes, las órdenes que tenemos que ejecutar son:

bash:/usr/src/linux$ sudo make-kpkg clean
bash:/usr/src/linux$ sudo make-kpkg --append-to-version=.XXXX --initrd kernel_image

Tras ejecutar la segunda de ellas nos saldrá un mensaje de aviso diciéndonos que la opción --initrd puede no funcionar como nosotros esperamos, y preguntándonos si queremos abortar el proceso. Como ya sabemos que a nosotros nos va a funcionar correctamente, contestamos que no.
Y ahora a esperar, porque el proceso de compilación puede durar mucho.



5) INSTALAR EL KERNEL

Si todo lo anterior ha ido bien, en el directorio /usr/src se debe haber creado un archivo de nombre kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb
Este es el archivo que contiene nuestro kernel compilado listo para instalar, lo que haremos con:

bash:/usr/src$ sudo dpkg -i kernel-image-2.6.8.1.XXXX_10.00.Custom_i386.deb

Esta orden es equivalente a las clásicas make modules_install y make install, además de colocar en su sitio la imagen initrd generada y actualizar el grub o el lilo.

Ahora, y por seguridad, borramos el enlace que habíamos creado:

bash:/usr/src$ sudo rm linux

Y ya está. Sólo nos queda arrancar con nuestro nuevo kernel.



Saludos a todos, y espero que os sea de utilidad.

Jorge

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.

Para completar: module-assistant

Aupa,

Para completar a make-kpkg yo tengo que recomendar module-assistant, o m-a para los amigos algooooo

Con esta herramientas podremos bajarnos los modulos que no estan en el kernel (pero que si estan en nuestros repositorios apt), compilarlos y crear un paquete .deb que acompañe a nuestro kernel.deb.

Por ejemplo:

m-a update ; m-a a-i nvidia

Mas info: http://ghost.anime.pl/doc/module-assistant/HOWTO



Dios mio, esta lleno de estrellas!.

duda con el module assistant

Hola, intente compilar el kernel, creo que no funciona por que me faltan modulos, podrias detallar un poco mas como hacerlo por favor (agregar los modulos), creo que el que me falta es el propietario de nvidia(este lo tengo instalado bien.
Gracias
Saludos

Dudas

compile el kernel, para poder instalar el acelerador grafico de la ati mobility radeon 9700, tengo un note con esa tarjeta, pero al compilar, me salia un error en un modulo usb de wireless, al sacarlo me e kedado sin conexion, me gustaria saber si saben de alguna pagina en la cual hablen de kernel en notebooks, creo k el modulo era z..11 jajaja sorry pero se me olvido.

¿Y si no tengo conexión a internet?

Esa es mi gran pregunta. En estos momentos estoy con mi ubuntu sin conexión a la red (estoy escribiendo desde w2k), me estoy bajando el linux-source-2.6.9_2.6.9.orig.tar.gz desde el sitio oficial de ubuntu. Sin embargo es la primera vez que intentaré compilar un kernel y no sé si elegí el archivo correcto (hay 8 archivos "linux-source" al lado de muchos otros "linux-image", "linux-header" y "kernel-images". Por si las moscas bajaré el archivo linux-source-2.6.9_2.6.9-9_all.deb, ya que no sé si el anterior viene con todos los módulos que supongo que trae ubuntu. Pienso mantener la configuración que tengo, pero actualizando el kernel y desactivando un módulo que me genera problemas.

Perdón si sueno muy demandante, pero ando medio desesperado.

Respuesta

Esa es mi gran pregunta. En estos momentos estoy con mi ubuntu sin conexión a la red (estoy escribiendo desde w2k), me estoy bajando el linux-source-2.6.9_2.6.9.orig.tar.gz desde el sitio oficial de ubuntu. Sin embargo es la primera vez que intentaré compilar un kernel

### Aconsejo leer: http://www.faqs.org/docs/Linux-HOWTO/Kernel-HOWTO.html

y no sé si elegí el archivo correcto (hay 8 archivos "linux-source" al lado de muchos otros "linux-image", "linux-header" y "kernel-images". Por si las moscas bajaré el archivo linux-source-2.6.9_2.6.9-9_all.deb, ya que no sé si el anterior viene con todos los módulos que supongo que trae ubuntu.

### Baja Linux source y la version ahorita esta en la 2.6.15 creo, y fijate que su terminacion sea tar.bz2.

Pienso mantener la configuración que tengo, pero actualizando el kernel y desactivando un módulo que me genera problemas.

### Como dice ahi copia tu configuracion vieja a la carpeta donde desempaquetes el linux source como .config

Perdón si sueno muy demandante, pero ando medio desesperado.

### De eso trata la comunidad, de quitar lo desesperado. algooooo Suerte, nos cuentas como te fue.

Imagen de negrolder

¿Y el paquete de los módulos?

Se supone que la gracia de compilar un kernel y empaquetarlo en un .deb es la de poder instalarlo a voluntad en otra instalación. ¿No se tendría que hacer algo como?sudo make-kpkg --append-to-version=.XXXX --initrd modules_image para instalar los módulos?

... pregunto...

Está muy bien, pero y para s

Está muy bien, pero y para saber que módulos debo elegir, donde puedo encontrar ayuda? Porque no tengo ni idea....
Salu2

El objetivo kernel_image

El objetivo kernel_image solo genera la imagen del kernel para generar todos los paquetes se debe usar binary. Podriais actualizar el howto.

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.