| Artículos | 01 FEB 2006

Cómo compilar el Kernel de Linux

Tags: Histórico
Ajustar al máximo nuestro sistema con un Kernel 2.6.x
Diego Freniche.
Linux nos permite acceder de forma libre a su código fuente, es decir, a las instrucciones que componen el programa. Gracias a ello podemos compilarlo y crearnos un Linux a medida, adaptándolo totalmente a las características de nuestra máquina. Veamos cómo hacerlo con las últimas versiones del kernel.

La diferencia más importante entre los S.O. libres y los propietarios no es su coste, sino la posibilidad de acceder de forma libre (y en la mayoría de los casos casi gratuita) a su código fuente. En el caso de Linux, esto significa disponer de más de 18.000 ficheros (entre los .c, ficheros de programa y .h, ficheros de cabecera) escritos en lenguajes C y ensamblador. Bien, ¿y qué hago ahora que tengo todo esto en mi disco duro? ¿Cómo recompilo el kernel? ¿Es esto algo que sólo mentes preclaras y programadores de aspecto sospechoso pueden hacer? Como veremos, compilar el kernel está al alcance de cualquiera que tenga ganas de aprender y motivación suficiente para disponer de un S.O. personalizado en su máquina.

Montones de jerga, empezamos bien
Que nadie se asuste. Al menos, no tan pronto. Expliquemos un poco los términos oscuros que hemos de emplear. Kernel, en inglés, es la parte sustancial de una cosa. En el caso de un S.O. su kernel es la parte fundamental, la que inicia la máquina y nos da los servicios imprescindibles. El kernel de Linux está programado en su mayoría en lenguaje C, y algunas partes en ensamblador (lenguaje dependiente de la arquitectura de cada máquina y el más cercano al código máquina).
Compilar el kernel no es más que construir un programa ejecutable a partir de su código fuente. Es como hornear la harina con levadura para que nos salga pan. El código fuente es al kernel lo que la harina al pan. Y una vez fuera del horno, el kernel es la miga y la corteza, lo que hace pan al pan. El bloc de notas o el solitario (o en el caso del pan, si lleva más o menos sal), no son fundamentales, luego no son el kernel.

Más sobre el kernel
Pero realmente ¿qué hace el kernel? Pues muchas cosas que normalmente no se ven, pero sin las cuales sería casi imposible usar nuestras máquinas. Sin ánimo de ser rigurosos (para eso recomiendamos el imprescindible libro de Andrew Tanembaum Sistemas Operativos Modernos, cuyo índice se puede consultar en la página web del sabio, www.cs.vu.nl/~ast/) el S.O. se ocupa de aislarnos del hardware real de nuestra máquina y de ofrecernos servicios como la gestión de la memoria y de la CPU. Nos aísla, por ejemplo, permitiendo que nuestro programa favorito de grabación de CD funcione con cualquier grabadora, independientemente de su marca. Para ello se utiliza un controlador de dispositivo o driver que se maneja siempre del mismo modo y oculta las peculiaridades de cada grabadora. El S.O. gestiona la memoria y la CPU permitiendo tener en ejecución simultáneamente varias tareas que no interfieran entre ellas. O bien gestiona su comunicación mediante llamadas entre procesos.
¿Qué razones podemos tener para recompilar el kernel? Pueden ser varias, pero por citar algunas: el kernel que viene con mi distribución no reconoce todo el hardware que tengo instalado, o bien quiero aprovechar al máximo las características de mi máquina, o quiero cargar sólo lo estrictamente necesario, eliminando drivers no usados, o quiero aprender a compilar el kernel. Después de compilar nuestro primer kernel, miraremos a Linux de otra forma: si hemos podido con esto, todo lo demás (en teoría, claro) es más sencillo.

Obtener el kernel
Podemos obtener el kernel de Linux de diferentes fuentes (Internet, CD-ROM de revistas como PC World, etc.). Para las versiones que deriven de Debian las dos fundamentales son la sede web oficial del kernel de Linux, kernel.org, que podemos ver en la Figura 1, y los repositorios de Debian (accesibles mediante las herramientas de bajo nivel apt-get y la aplicación de alto nivel Synaptic). En Debian se distribuyen diferentes paquetes para el kernel, con modificaciones especiales para Debian. Estos paquetes pueden corresponder a imágenes de kernels ya compilados (listos para instalar), a los ficheros de cabecera de una versión concreta (para desarrolladores o para recompilar un programa que los necesite) o bien ser el árbol completo que contiene todos los fuentes del kernel. Los primeros se llamarán kernel-image-*, los segundos kernel-headers-* y los últimos kernel-source-*.
La versión disponible a través de los repositorios Debian (incluyendo Sid, el repositorio más actualizado de Debian) puede no ser la última. Normalmente transcurre un tiempo hasta que se construye un paquete Debian y se prueba. En kernel.org dispondremos de las últimas versiones, incluyendo las de prueba (que puede que no compilen correctamente).
En nuestro caso vamos a usar el paquete Debian. Para ello, escogeremos la versión (con Debian Sarge es la 2.8) y buscaremos en Synaptic el paquete correspondiente, llamado kernel-source-2.6.8. Una vez descargado (ocupa algo más de 35 MB), veremos que ha dejado un fichero en /usr/src llamado kernel-source-2.6.8.tar.bz2.
Antes de terminar con Synaptic, un par de notas sobre otros paquetes. Ya que tenemos el kernel, antes de compilarlo debemos configurarlo. Para esto existen cuatro métodos: sin interfaz gráfica, con una interfaz en modo texto, con una interfaz para X y con otra especial para Gnome. Veremos el segundo y el último. Necesitaremos descargar, para la configuración con menús texto, la biblioteca ncurses5 en su versión de desarrollo (libncurses5-dev). Ojo con esto: probablemente tengamos instalada la biblioteca libncurses5 y pensemos ¿y para qué se necesita una versión de desarrollo? Una biblioteca permite usar sus funciones, pero no crear programas basados en ella. La versión de desarrollo incluye la documentación de la biblioteca (en formato man), los ficheros de cabecera y las tablas de símbolos, imprescindibles para que el compilador de C pueda construir programas con ella.

Antes de empezar, copia de seguridad
Antes de hacer nada más, debemos advertir: instalar un nuevo kernel es algo que puede ir mal. Y en ese caso puede que nuestra máquina no arranque. Para prevenir esto y disponer de un método sencillo de restaurar el sistema, debemos hacer copia de seguridad de nuestro kernel actual y de los módulos que estamos usando. Para ello, abriremos una consola (pulsando con el botón derecho sobre el escritorio de Gnome y seleccionando la primera opción) y nos convertiremos en root mediante:
$ su
Password:
# mkdir /root/backup-kernel
# cp -r /boot/ /root/backup-kernel/
# cp -r /lib/modules/2.6.5/ /root/backup-kernel/
Una vez realizada la copia de seguridad, continuaremos con la tranquilidad que da el saber que si nuestro sistema no funciona correctamente, siempre podremos volver al estado anterior de forma sencilla.
El kernel se distribuye comprimido en formato bzip2. Para descomprimirlo escribiremos:
# cd /usr/src/
# bzip2 -d kernel-source-2.6.8.tar.bz2
Esto nos crea un fichero tar en /usr/src, concretamente kernel-source-2.6.8.tar. Este fichero, que contiene todos los ficheros del kernel, no tiene actualmente permisos para que lo lea o modifique un usuario normal. Vamos a extraerlo mediante:
# tar xvf kernel-source-2.6.8.tar
Veremos muchas líneas de información, una por cada fichero que se extrae del fichero tar. Ahora nos cambiaremos a una consola de usuario normal. Esto es importante: los pasos que h

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información