Gestión del kernel y dispositivos

Anuncio
Gestión del kernel y
dispositivos
Juan Hernando Vieites
jhernando@fi.upm.es
Administración de sistemas UNIX/Linux
Curso 2012/2013
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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.
jhernando@fi.upm.es
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
jhernando@fi.upm.es
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
jhernando@fi.upm.es
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"
jhernando@fi.upm.es
Gestión del kernel y dispositivos
13/13
Descargar