Capítulo 18. El sistema hotplug

Tabla de contenidos

18.1. Dispositivos e interfaces
18.2. Eventos hotplug
18.3. Agentes hotplug
18.4. Carga automática de módulos
18.5. Hotplug con PCI
18.6. El script de arranque coldplug
18.7. Análisis de fallos

Resumen

El sistema hotplug regula el inicio de la mayoría de dispositivos de un ordenador. No sólo afecta a los dispositivos que pueden conectarse y desconectarse mientras el sistema está activo, sino también a aquellos detectados durante el arranque del sistemas. El sistema hotplug colabora estrechamente con el sistema de archivos sysfs y udev, los cuales se describen en el Capítulo 19, Nodos de dispositivos dinámicos con udev.

Antes del arranque del kernel, sólo se inician dispositivos imprescindibles como pueden ser el bus, los disquetes de arranque o el teclado. El kernel desencadena eventos hotplug para todos los dispositivos detectados. El daemon udevd escucha dichos eventos y activa los scripts hotplug correspondientes para iniciar esos dispositivos. Para dispositivos que no pueden detectarse automáticamente o cuyos eventos se ha perdido al iniciarse el arranque, existe el sistema coldplug. Este sistema reproduce eventos guardados o busca en el sistema dispositivos sin iniciar y utiliza configuraciones estáticas para dispositivos antiguos como por ejemplo ISA.

Actualmente, la mayoría de dispositivos (excepto algunas excepciones por razones históricas) son iniciados en cuanto es posible acceder a ellos, bien durante el arranque o al ser conectados. Durante el inicio, las interfaces se registran en el kernel. Este regristro a su vez desencadena varios eventos hotplug que hacen que la interfaz se configure automáticamente.

En antiguas versiones de SUSE LINUX se partía de un conjunto estático de datos de configuración que, al aplicarse, causaba el inicio de dispositivos. Hoy en día, el sistema examina los dispositivos disponibles y busca para ellos datos de configuración adecuados o bien los genera.

Existen dos archivos para la configuración de las funciones hotplug más importantes. /etc/sysconfig/hotplug alberga variables para modificar el comportamiento de hotplug y coldplug. El archivo contiene comentarios que explican el significado de cada variable. El archivo /proc/sys/kernel/hotplug muestra el nombre del programa que ejecuta el kernel para realizar el soporte hotplug. La configuración de los dispositivos se encuentra en el archivo /etc/sysconfig/hardware. Desde la distribución SUSE LINUX 9.3, este archivo suele estar vacío ya que udevd recibe los mensajes hotplug a través de un socket netlink.

18.1. Dispositivos e interfaces

El sistema hotplug gestiona interfaces además de dispositivos. Un dispositivo (device) siempre está conectado a una interfaz o a un bus. Un bus puede considerarse como una interfaz múltiple. Una interfaz (interface) conecta dispositivos entre sí o a una aplicación. Además de dispositivos físicos existen también dispositivos virtuales (por ejemplo un túnel de red). Los dispositivos necesitan normalmente controladores en forma de módulos del kernel. Las interfaces suelen estar representadas por nodos de dispositivo creados por udev. La distinción entre dispositivo e interfaz es fundamental para entender el concepto completo.

Los dispositivos registrados en el sistema de archivos sysfs se encuentran en /sys/devices mientras que las interfaces están en /sys/class o /sys/block. Todas las interfaces incluidas en sysfs deberían contar con un enlace (link) a su dispositivo. No obstante, todavía existen algunos controladores que no añaden este enlace automáticamente. Sin este enlace no es posible determinar a qué dispositivo pertenece una interfaz ni encontrar una configuración adecuada.

Se accede a los dispositivos a través de una descripción de dispositivo. Esta descripción puede ser el “devicepath” en sysfs (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0), una descripción del lugar de conexión (bus-pci-0000:02:00.0), un ID individual (id-32311AE03FB82538) o una descripción similar. Hasta ahora, para acceder a una interfaz siempre se utilizaba su nombre. Estos nombres eran simplemente una numeración correlativa de los dispositivos disponibles y podían cambiar al añadir o eliminar dispositivos.

También es posible acceder a una interfaz por medio de la descripción del dispositivo respectivo. Según el contexto, en cada caso se distingue si la descripción se refiere al dispositivo o a su interfaz. A continuación se presentan algunos ejemplos típicos de dispositivos, interfaces y descripciones:

Tarjeta de red PCI

Es un dispositivo conectado al bus PCI (/sys/devices/pci0000:00/0000:00:1e.0/0000:02:00.0 o bien bus-pci-0000:02:00.0) que dispone de una interfaz de red (eth0, id-00:0d:60:7f:0b:22 o bien bus-pci-0000:02:00.0). Esta interfaz es utilizada por servicios de red o está conectada a un dispositivo de red virtual como un túnel o VLAN que a su vez posee una interfaz.

Controladora SCSI PCI

Es un dispositivo (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0 o bus-scsi-1:0:0:0) que ofrece varias interfaces físicas en forma de un bus (/sys/class/scsi_host/host1).

Disco duro SCSI

Un dispositivo (/sys/devices/pci0000:20/0000:20:01.1/host1/1:0:0:0 o bus-scsi-1:0:0:0) con varias interfaces (/sys/block/sda*).


SUSE LINUX Manual de administración 9.3