Guia de compilación del kernel

Contenido

Qué es el "kernel"

Breve explicación sobre el concepto.


Qué es una compilación

Breve explicación sobre el concepto.


¿Por qué compilar el kernel?

Compilar un kernel puede dar muchas ventajas, pero también tiene sus desventajas si no se hace correctamente.


En caso de procesador Intel

Las distribuiciones i386 tienen que ser universales para todo los sistemas i80386, pero este procesador fue producido a partir de 1986.

Esto supone que estamos usando nucleos basados en una arquitectura del año 1986.

Actualmente se han añadido nuevas instrucciones a los procesadores que permiten calcular más rápido, no solamente se ha aumentado en velocidad de ellos.

De manera que sería recomendable siempre compilar un kernel adaptado al procesador en cada nueva revisión que salga.

Casos generales

Es posible que se quiera compilar el kernel si se desea añadir un nuevo driver, cambiar la latancia del núcleo, configurar otros aspectos importantes y sobre todo, actualizar el sistema para protegerlo de nuevos fallos de seguridad.

¿Donde consigo el código fuente?

Normalmente se puede conseguir el código fuente del núcleo en http://www.kernel.org/.

Es posible que si usas alguna distribuición puedes conseguirlo en sus archivos.

Ambas formas son completamente válidas.

Sin embargo, si eres usuario de Gentoo quizás te interese instalar el código fuente desde emerge a causa de que esto aplicará diversos parches al núcleo de forma automática.

¿Que versión del kernel elijo?

Debes tener en cuenta que se distinguen dos tipos de kernel:


Versión de producción

Es la versión estable hasta el momento y es el resultado final de las versiones en desarrollo o experimentales


Versión de desarrollo

Esta versión es experimental y es la que utilizan los desarrolladores para programar, comprobar y verificar

nuevas características, correcciones, etc. Estos núcleos suelen ser inestables y no se deberían usar, a no

ser que fuese un usuario especializado en núcleos


Para distinguir la versión del kernel

Para poder saber que kernel estas o te dispones a utilizar debes fijarse simplemente en el numero de la versión

la cual se establece de la siguiente manera: <Versión Kernel>.<Estable o Desarrollo>.<Subversión del Kernel>

En donde <Versión Kernel> indica la serie principal del Kernel (Actualmente 2.6)

<Estable o Desarrollo> indica con un numero impar si es de Desarrollo o un numero par para versiones Estable

<Subversión del Kernel> indica nuevas versiones que superan fallos o bugs en versiones anteriores de un mismo kernel.

Versión Actual del kernel: 2.6.25.4


Descargar Código Fuente del Kernel elegido

En kernel.org, por normal general suele salir la ultima versión estable para descargar en la pagina principal y aparece así:

The latest stable version of the Linux kernel is:  	2.6.25.4 	2008-05-15 15:03 UTC 	F 	V 	VI 	C 	Changelog

La letra F es un link al archivo comprimido del código fuente del kernel, así que ya sabes donde descargarlo.


Una vez descargado el código fuente comprimido

Una vez descargado, lo usual y para mantener un poco el orden dentro de nuestro sistemas de ficheros es descomprimirlo

en la carpeta /usr/src, donde encontraras que ya hay alguna carpeta de alguna versión precompilada dependiendo de tu distribución.


Eligiendo el metodo para Compilar

Te preguntaras... !Dios! ¿!Hay más de uno!? Pues si hamijo mio!, los hay, pero para tu sorpresa, el segundo metodo es muchisimo

más rapido que el tradicional, y por ello, aqui voy a dar un breve resumen de cada uno de los metodos centrandome más en el segundo: El metodo Tradicional y

El metodo Debian (Solo disponible para sistemas que utilicen paquetes .deb).

Antes de empezar

Deben configurarse las opciones a utilizar implementadas en el núcleo del propio kernel, cuáles irán como módulo y cuáles, directamente, no estarán presentes en la base del nuevo Linux.


¿Qué diferencia hay entre que una opción vaya implementada en núcleo y como módulo?

Pues en pocas palabras, si va implementada en el núcleo, cuando este se cargue al principio de todo, cargara todo lo que vaya

implementado en el núcleo de manera automática y lo que vaya como modulo se cargara una vez cargado el núcleo.

Por ello, lo más lógico, es poner, aparte del menor numero posible de opciones implementadas en núcleo, poner las imprescindibles

para que nuestro sistema operativo pueda arrancar, y dejar como modulo, todo aquello que no sea vital para que nuestro Linux funcione.

Por ejemplo: El modulo de la tarjeta de sonido no es imprescindible para que nuestro sistema arranque, sin embargo, el modulo de Discos Duros

o sistemas de ficheros sí.

No voy a entrar a comentar cada una de las opciones que aparecen en el menú de configuración del kernel, pero si os recomiendo que no

quitéis nada de lo que ya viene por defecto a no ser que estés completamente seguro de que lo que tocas no vaya a provocar un

Kernel Panic o cualquier otro error que no le guste a nuestro sistema operativo.

Configurar y Compilar el Kernel

Una vez dentro de la carpeta que hemos descomprimido dentro de /usr/src, debemos ejecutar un comando, dependiendo del método elegido para configurarlo:

make config

Paso a paso, con lo cual debemos recorrer uno a uno todas las opciones (no aconsejable).

make menuconfig

Mediante menús, el modo mas aconsejable y cómodo, utiliza la dependencia ncurses.

make xconfig

Mediante menús gráficos.


Una vez configurado el Kernel, guardamos la configuración en .config (Opción del menuconfig: --Save config--), y ya podemos proceder a compilar el kernel.

Compilación: Estilo Tradicional

make dep

Con esto configuramos las dependencias del kernel.

make clean

Para limpiar las "impurezas".

make bzImage

Esto creará una imagen del kernel compilada y comprimida con bzip2, por lo cual obviamente necesita tener instalado bzip2.

make modules

Con esto compilamos las opciones escogidas como módulos.

make modules_install

Y finalmente con esto otro instalaremos los diversos módulos.


Esto generara una imagen de nuestro Kernel que deberemos implementar en nuestro gestor de arranque.

Compilación: Estilo Debian (.deb)

Para poder utilizar este estilo, que básicamente lo que hace es compilarte el kernel y empaquetarlo en un .deb para que tu

después y de manera más cómoda, lo instales como quien no quiere la cosa y automáticamente lo tendrás disponible en tu

gestor de arranque, necesitamos las siguientes dependencias:

apt-get install build-essential kernel-package

Cuando el apt-get termine, ya tendremos disponibles el siguiente comando:

make-kpkg

el cual va a ser el encargado de compilar absolutamente todo y empaquetarlo en el .deb.

Para ello ejecutamos:

make-kpkg clean
make-kpkg --append-to-version=.<fechadecompilacion> --initrd kernel_image kernel_headers

Te preguntaras para que es eso del append-to-version, no es mas que una mera indicación que se añade a la versión del kernel que estamos compilado

para poder distinguirlo de otros que ya tengamos instalados.

Ejemplo: --append-to-version=holapaco => versión del kernel: 2.6.25.4.holapaco (por ello se incluye el .)

--append-to-version=.holapaco => versión del kernel: 2.6.25.4.holapaco


Una vez terminen estas instrucciones, tendremos en la carpeta /usr/src dos paquetes .deb, que serán la imagen del kernel y los headers

Ya lo único que nos queda es instalarlo... ¿Como?

dpkg -i kernel-image-<version>.deb kernel-headers-<version>.deb


Y con esto, lo que te queda es reiniciar y seleccionar tu nuevo kernel en tu gestor de arranque, el cual debería de iniciarse sin problemas.