Capítulo 4. El núcleo de Linux

Tabla de contenidos

Introducción
El código binario del núcleo
El código fuente del núcleo
Compilación e instalación de un nuevo núcleo

Introducción

El núcleo de un sistema operativo es el programa que gobierna el hardware del ordenador y ofrece una interfaz de servicios al resto de programas (procesos) que se ejecutan en dicho ordenador. Normalmente, el núcleo es el primer código que se carga en memoria cuando encendemos el ordenador y permanece en dicha memoria mientras el sistema está en funcionamiento, entrando en ejecución cada vez que un proceso requiere uno de sus servicios o un dispositivo físico requiere su atención. Una de las diferencias fundamentales entre el núcleo del sistema y los procesos que se ejecutan "por encima" del mismo es que uno y otros se ejecutan en modos de procesador distintos (siempre que el hardware del ordenador soporte esta característica). El núcleo suele ejecutarse en alguno de los modos privilegiados del procesador, en el que tiene completo acceso a todo el hardware (incluyendo la programación de los dispositivos), mientras que los procesos se ejecutan en "modo usuario", en el que no pueden ejecutar un buen número de de instrucciones máquina del procesador. De esta forma, el núcleo se convierte en una especie de intermediario obligado en la mayoría de las acciones que los procesos ejecutan, lo que le permite implementar de forma adecuada la multitarea, repartiendo de forma equitativa y segura los recursos del sistema entre los diferentes procesos que se ejecutan en cada momento.

En el caso concreto de Linux, el tema del núcleo puede inducir a error, dado que se suele denominar Linux al sistema operativo completo (incluyendo todos los programas y utilidades que podemos ejecutar cuando instalamos el sistema) además de al núcleo en sí mismo. En otros sistemas operativos comerciales (como por ejemplo Windows 2000 o Solaris) esta distinción no es necesaria, puesto que ambos (el núcleo y dicho conjunto de utilidades y programas que se distribuyen junto con él) provienen de la misma empresa (en el ejemplo, Microsoft y SUN Microsystems, respectivamente) y se distribuyen conjuntamente. Sin embargo, en el caso de Linux esto no es así. El núcleo propiamente dicho es desarrollado por un grupo de personas (lideradas por el creador de Linux, Linus Torvalds) de forma independiente del resto de utilidades, herramientas y aplicaciones que tenemos disponibles cuando instalamos Linux. A este conjunto de utilidades (más un núcleo concreto) se lo conoce como una distribución de Linux, y existen numerosas empresas, organizaciones e incluso individuos que mantienen distintas distribuciones: Fedora, Debian, SuSe, Mandrake, Caldera, Gento, etc. Puesto que el núcleo se distribuye líbremente como código GPL, en realidad cualquiera de dichas organizaciones puede realizar modificaciones en el núcleo (y algunas lo hacen), pero Linus y su equipo siguen manteniendo el control sobre el núcleo reconocido.

De esta manera, las distribuciones y los núcleos tienen versiones distintas e independientes. Por ejemplo, en estos momentos la versión actual de Fedora Linux se denomina "Core 1", y el núcleo que instala por defecto es el 2.4.22. La nomenclatura de la versión del núcleo es significativa del estado del mismo: el segundo número indica si la versión es estable (número par) o de desarrollo (número impar), mientras que el último dígito indica un número de orden (creciente) de la versión. Un número mayor indica un núcleo más reciente y (probablemente) con mayor y mejor soporte.

En la mayoría de situaciones, el núcleo pasa desapercibido al usuario común (incluso al administrador), puesto que los usuarios interactúan con los "programas" (o más correctamente con los procesos), que internamente interactúan con el núcleo. Sin embargo, existen situaciones en las que necesitamos modificar el soporte ofrecido por el núcleo, para conseguir mejores prestaciones, un sistema más seguro o mejor adaptado a un uso concreto, o simplemente para poder acceder a un nuevo tipo de dispositivo físico. Este capítulo explica los pasos necesarios para poder modificar el soporte del núcleo de Linux.

Los siguientes apartados explican los conocimientos mínimos imprescindibles sobre el núcleo de Linux (los ficheros binarios involucrados, el concepto de módulo de núcleo, donde encontrar los fuentes, etc.). Finalmente, se explica cómo obtener un núcleo nuevo, mediante la compilación de una versión en código fuente y su instalación en el sistema.