Gestión del kernel y dispositivos Juan Hernando Vieites [email protected] Administración de sistemas UNIX/Linux Curso 2012/2013 [email protected] Gestión del kernel y dispositivos 1/13 El kernel de un sistema UNIX y los dispositivos • La mayorı́a si no todos los núcleos de sistemas UNIX/Linux siguen un diseño monolı́tico: todo el código ejecuta en el mismo espacio de direcciones • El kernel se encarga de abstraer los detalles de bajo nivel de acceso a los dispositivos. • Dichos detalles los conocen los controladores de dispositivos, que en muchos casos se presentan en forma de módulos que pueden ser cargados y descargados dinámicamente. • El kernel expone ciertas funcionalidades de los controladores a través de /proc, los ficheros de /dev y /sys en algunos Linux. [email protected] Gestión del kernel y dispositivos 2/13 Mensajes del kernel • Ante cualquier eventualidad (conexión/desconexión de dispositivos, errores, ...) el núcleo proporciona una traza que se puede consultar en /var/log/dmesg o bien con el mandato dmesg • La mayor parte de los mensajes también se almacenan en el registro de sistema el cual se halla en /var/log/syslog. • Este registro presenta información importante cuando se está tratando de depurar en fallo en la configuración o funcionamiento de un dispositivo. [email protected] Gestión del kernel y dispositivos 3/13 Dispositivos El sistema de ficheros /dev • /dev expone los dispositivos hardware como ficheros virtuales. • Cada fichero lleva asociados 2 números que sirven para saber que controlador lo maneja: • major: que identifica el tipo de dispositivo • minor: que determina la instancia y subtipo. Creación de dispositivos • Los ficheros de dispositivo pueden ser creados con el mandato mknod • En los UNIX actuales es muy raro tener que hacerlo manualmente ya que /dev su rellena automáticamente al arranque e incluso de manera dinámica en ejecución. [email protected] Gestión del kernel y dispositivos 4/13 Personalización del kernel Motivación Se trata de algo poco habitual, pero puede hacer falta configurar el kernel si queremos: • Añadir soporte para: • Algún dispositivo poco común. • Sistemas de ficheros no convencionales. • Nuevas llamadas al sistema. • Maximizar el rendimiento de alguna aplicación. Métodos de personalización • Modificar parámetros dinámicos. • Cargar módulos sobre la marcha. • Proporcionar opciones y directivas desde el cargador de arranque. • Configurar y compilar desde el código. [email protected] Gestión del kernel y dispositivos 5/13 Configuración dinámica del kernel en Linux Configuración temporal • Consiste en escribir valores sobre ficheros especiales que se pueden encontrar en /proc, /proc/sys o /sys • Por ej, /proc/sys/fs/file-max determina el número máximo de ficheros que se puede tener abierto. Configuración permanente • Para no perder los cambios al reiniciar se usa el mandato sysctl. • Dicho mandato no hace si no modificar el fichero /etc/sysctl.conf que se lee al arranque. [email protected] Gestión del kernel y dispositivos 6/13 Compilar el kernel en Linux Instrucciones genéricas Una vez descargado el código fuente desde un paquete de la distribución o desde kernel.org, se procede desde el directorio raı́z del código a: • Configurar: make gconfig, make xconfig, make menuconfig • Limpiar una compilación previa: make clean • Compilar: make y make modules install • Copiar arch/i386/boot/bzImage a /boot/vmlinuz-name • Copiar arch/i386/boot/System.map a /boot/System.map-name • Copiar arch/i386/boot/config a /boot/config-name • Añadir reglas al cargador de arranque para el nuevo núcleo. [email protected] Gestión del kernel y dispositivos 7/13 Gestión de módulos Módulos de carga dinámica (LKM) • Son objetos de código que pueden ser cargados (y descargados) dentro el núcleo en tiempo de ejecución. • Normalmente residen en /lib/modules/uname -r Operaciones con módulos Las operaciones de bajo nivel son: • Carga: insmod archivo [opciones] • Descaga: rmmod nombre • Listado: lsmod Es preferible usar modprobe y modprobe -r, en vez de insmod y rmmod ya que manejan mejor las dependencias y errores. [email protected] Gestión del kernel y dispositivos 8/13 Gestión de módulos Configuración de módulos • La configuración de la carga de módulos está contenida en /etc/modprobe.conf o en ficheros dentro de /etc/modules.d/ • La configuración contiene rutas a ficheros objecto de módulos, alias, parámetros para la carga del módulo, listas negras, ... • En algunos distribuciones, el fichero /etc/modules contiene una lista módulos que cargar incondicionalmente al arranque. [email protected] Gestión del kernel y dispositivos 9/13 Gestión de módulos Compilación • La compilación de un módulo requiere tener las cabeceras, el System.map y la configuración del núcleo para el cual se va a compilar. (paquete linux-headers-‘uname -r‘ en el caso de distribuciones tipo Debian). • Lo mejor es siempre seguir las instrucciones del fabricante y en su defecto las de la distribución. Dynamic Kernel Module System (DMKS) Se trata de un sistema de compilación dinámico de módulos que permite cambiar de kernel sin tener que recompilar manualmente los módulos que funcionan bajo este sistema. [email protected] Gestión del kernel y dispositivos 10/13 Gestión dinámica de dispositivos: udev Introducción • Udev es un sistema de gestión de dispositivos que se encarga, entre otras cosas, de crear dinámicamente los ficheros especiales presentes en /dev. • Evita la proliferación de ficheros en /dev. • Permite asegurar un nombrado consistente. Arquitectura • El núcleo es un demonio (udevd) que ejecuta en espacio de usuario. • udevd escucha eventos del kernel por un socket netlink • Se configura por ficheros de reglas en /etc/udev [email protected] Gestión del kernel y dispositivos 11/13 Gestión dinámica de dispositivos: udev udevadm • udevadm es el mandato que se usa para consultar y gestionar el estado de los disposivos. • Básicamente es una herramienta para inspeccionar y modificar el contenido del sistema de ficheros virtual /sys Ejemplos udevadm monitor udevadm info --attribute-walk --name=/dev/sda udevadm info -a -n sda [email protected] Gestión del kernel y dispositivos 12/13 Gestión dinámica de dispositivos: udev Reglas de udev • udev usa reglas para determinar el nombrado y manejo de los dispositivos. • La configuración maestra está /etc/udev/udev.conf aunque normalmente es casi vacı́a. • Las reglas se hallan en /etc/udev/udev.d/ y son ficheros de extension .rules • la sintaxis es: clausula patron, [clausula patron, . . . ] clausula asignación [. . . , clausula asignación] Ejemplo: Nombrado persistente de una interfaz de red SUBSYSTEM=="net", DRIVERS==¿*", ATTR{address}=="00:1a:92:9b:b1:02", ATTR{type}=="1", NAME=.eth0" [email protected] Gestión del kernel y dispositivos 13/13