El núcleo Linux
El núcleo Linux
Este capítulo trata del núcleo y su compilación, de la gestión de sus módulos así como de su configuración dinámica.
1. Los componentes del núcleo
El objetivo de esta sección es de enseñarle a:
-
implementar los componentes del núcleo necesarios para el material específico, los drivers, los recursos y las necesidades del sistema. Esto incluye la instalación de diferentes tipos de imágenes del núcleo, la comprensión de las versiones estables y mantenidas a largo plazo del núcleo y de los parches, así como el uso de los módulos del núcleo.
a. Competencias principales
Documentación de las versiones del núcleo 2.6.x, 3.x y 4.x.
b. Elementos empleados
-
/usr/src/linux/
-
/usr/src/linux/Documentation/
-
zImage
-
Compresión xz
2. Compilación del núcleo
El objetivo de esta sección es de enseñarle a:
-
configurar un núcleo incluyendo o excluyendo funcionalidades dependiendo de las necesidades del sistema. Esto incluye compilar y recompilar el núcleo si fuera necesario, actualizar y documentar las modificaciones de un nuevo núcleo, crear una imagen initrd e instalar nuevos núcleos.
a. Competencias principales
-
/usr/src/linux/
-
Archivos Makefile del núcleo.
-
Objetivos make para los núcleos 2.6.x, 3.x y 4.x.
-
Personalizar la configuración...
Los componentes del núcleo
El núcleo Linux se encarga de administrar los recursos materiales de la máquina y de ponerlos a disposición de los diferentes programas que se ejecutan en esta máquina. De entre sus principales tareas, podemos citar:
-
Gestión del o de los microprocesadores: da acceso al procesador o a los procesadores a los diferentes programas, en función de su prioridad para que todos puedan acceder al recurso y que un programa no monopolice el o los procesadores (multitarea apropiativa).
-
Gestión de dispositivos: junto con los drivers de los dispositivos (drivers), gestiona los diferentes dispositivos de software y trata las solicitudes de los programas que quieren acceder a ellos.
-
Gestión de la memoria física y virtual: determina el reparto de memoria entre él mismo y los programas, y gestiona un mecanismo de memoria virtual que permite asignar más memoria de la que dispone físicamente la máquina.
-
Gestión del almacenamiento: gestiona el conjunto de los dispositivos de almacenamiento (con drivers de dispositivos y drivers de sistemas de archivos) y presenta a los programas una interfaz de acceso único, bajo la forma de una arborescencia de directorios y de archivos, construida a partir de diferentes sistemas de archivos.
-
Gestión de la red: toma en cuenta la comunicación en las redes en las que la máquina participa, a través de la tarjeta de interfaz de red y de sus drivers y permite que los diferentes programas emitan y reciban mensajes.
-
Gestión de los procesos: asegura la carga, la ejecución, el control y la finalización de los programas, bajo la forma de procesos, lo que les permite ejecutarse en simultaneidad aparente o real (según las capacidades del procesador de la máquina). Gestiona la seguridad mediante el control del acceso a los recursos en función de las habilitaciones de los procesos y a través del aislamiento de las zonas de memoria que le son asignadas.
-
Gestión del control de acceso a los recursos: con un modelo de seguridad basado en las nociones de cuenta de usuario y de grupo, proporciona un mecanismo que permite definir y controlar los permisos de acceso a los diferentes recursos que gestiona.
Para realizar estas tareas, el núcleo puede usar módulos de tipo software especializados, que pueden estar incluidos...
Compilación del núcleo
No es muy frecuente compilar una nueva versión del núcleo a partir de los archivos fuente. Esto puede ir en contra del contrato de soporte de la distribución usada.
Sin embargo podemos querer modificar los parámetros del núcleo, añadir o quitar componentes estáticos o módulos dinámicos, para integrar nuevos tipos de dispositivos, corregir algunos errores u optimizar el rendimiento y la ocupación de la memoria.
En este caso, el procedimiento que se tiene que seguir presenta distintas etapas, la configuración del núcleo que se generará es la más delicada. La compilación efectiva puede durar algunas decenas de minutos, o incluso más tiempo según el tipo de procesador y la memoria disponible. Cuando el nuevo núcleo haya sido generado, hay que probarlo con mucho cuidado antes de considerar ponerlo en producción.
1. Descarga de las fuentes del núcleo
Los archivos fuentes del núcleo están disponibles bajo dos formas: paquetes de software o archivos comprimidos.
a. Paquete
La distribución de la máquina objetivo proporciona generalmente paquetes de software que contienen los archivos fuentes del núcleo soportado por su versión de distribución. Si el paquete corresponde a la versión que desea compilar, es el método que deberá usar preferiblemente.
Los archivos fuentes del núcleo se instalarán en uno de los directorios en /usr/src/kernels o en el directorio /usr/src/linux*, el nombre del directorio corresponderá a la versión del núcleo.
Distribuciones de tipo Red Hat
A menudo, la compilación del núcleo está vinculada con un módulo del núcleo y no con el núcleo completo.
En este caso, las distribuciones de tipo Red Hat proponen un paquete de software adaptado: kernel-devel.
Si necesita compilar una versión personalizada del núcleo, tendrá que usar el método por archivo comprimido.
Ejemplo
Instalación del paquete kernel-devel en una distribución RHEL 8.5:
dnf install kernel-devel
Se ha instalado el paquete kernel-devel-4.18.0-372.19.1.el8_6.x86_64.
Resolviendo dependencias.
¡Listo!.
La versión del núcleo es algo más reciente que el del sistema:
uname...
Gestión y depuración del núcleo
Este tema es relativo al seguimiento y a la configuración dinámica del núcleo y sus módulos dinámicos. Estudiaremos diferentes comandos y herramientas que permiten listar, cargar y descargar los módulos LKM, visualizar y modificar dinámicamente los parámetros de los módulos y del núcleo, y forzar esos parámetros para aplicarlos durante el arranque del sistema.
El servicio udev y los comandos que permiten seguir el estado de los dispositivos detectados por el sistema son tratados en la sección Gestión de los discos duros locales del capítulo Gestión de dispositivos de almacenamiento.
1. Gestión de los módulos de núcleo LKM
Los módulos de núcleo dinámicos (LKM, Loadable Kernel Module), definidos en la compilación del núcleo, son gestionados automáticamente. Algunos, necesarios durante la carga y la inicialización del núcleo, se cargan en memoria mediante el archivo de disco virtual initramfs. El núcleo carga también sistemáticamente durante el arranque todos los módulos específicados en un archivo de configuración.
Otros módulos se cargan en el momento que sean solicitados, la primera vez que un programa hace una llamada al sistema cuando necesita su uso. Por otro lado, se pueden descargar de la memoria los módulos que ya no estén siendo utilizados.
Si una aplicación necesita la carga de un módulo que no ha sido tomado en cuenta por el núcleo, éste generará un error en respuesta a su solicitud. Para que la aplicación pueda funcionar, habrá que copiar el archivo del módulo en el sistema (si todavía no se ha hecho), cargarlo manualmente y configurarlo en carga automática.
Distintos comandos y archivos de configuración permiten controlar el funcionamiento de los módulos, gestionar su carga y descarga, así como sus parámetros.
a. Ubicacion de los módulos
Los archivos que contienen el código ejecutable de los módulos están almacenados en la arborescencia en /lib/modules. Cada versión del núcleo instalado en el sistema tiene su propio directorio de almacenamiento de los módulos.
Ejemplo
Version del núcleo...