5.2. Capa de abstracción de hardware (HAL)

HAL es una capa de abstracción de hardware cuyo objetivo es proporcionar una lista de los dispositivos que están presentes en el sistema. Los dispositivos físicos están en la lista almacenados con la forma de objetos de dispositivo. El objeto de dispositivo puede ser cualquier parte direccionable del dispositivo.

HAL proporciona una API de red a través de D-BUS para hacer consultas a los dispositivos y notificar cuando se produzcan cambios. Por último, HAL proporciona algunas funciones de monitorización de dispositivos que no se consideran intrusivas. Actualmente, se monitorizan la detección de enlaces de Ethernet y los montajes de los volúmenes.

El componente central de HAL es el daemon de HAL, hald. Se trata de un daemon de sistema que mantiene una base de datos de objetos de dispositivo. El daemon también contiene código de monitorización y detección para los buses (como, por ejemplo, los buses PCI y USB) y dispositivos (como los dispositivos de almacenamiento y de red). El daemon hald se encarga de gestionar el ciclo de vida de los objetos de dispositivo.

Un objeto de dispositivo incluye un identificador de dispositivo único (UDI, Unique Device Identifier) y un conjunto de propiedades en pares de claves y valores. Las propiedades se definen en la especificación HAL (consulte la Sección 5.3, “Información adicional” (↑Guía de conectividad)). Puede añadir nuevas propiedades o ajustar las existentes mediante archivos de información de dispositivos, los cuales se almacenan en el directorio /usr/share/hal/fdi.

Cuando se modifica la lista de objetos de dispositivo o cuando se cambia una propiedad de un dispositivo, hald invoca llamadas (callouts), que son programas que se pueden usar para mantener directivas de sistema como, por ejemplo, cambiar los permisos de un dispositivo o actualizar los archivos de sistema. Existen tres tipos de llamadas:

Device Add or Remove (Dispositivo añadido o eliminado)

Todas las llamadas de este tipo se encuentran en /etc/hal/device.d. La llamada Device Add (Dispositivo añadido) se invoca después de que un dispositivo se haya añadido a la lista global de dispositivos (GDL, Global Device List) y antes de que se anuncie a través de D-BUS. La llamada Device Remove (Dispositivo eliminado) se invoca cuando se elimina un dispositivo. El dispositivo no se elimina hasta que haya finalizado la última llamada.

Capability Add or Remove (Capacidad añadida o eliminada)

Todas las llamadas de este tipo se encuentran en /etc/hal/capability.d. Esta llamada se invoca cuando se añade o se elimina una capacidad.

Property Change (Cambio de propiedad)

Todas las llamadas de este tipo se encuentran en /etc/hal/property.d. Esta llamada se invoca cuando se añade, se elimina o se modifica una propiedad de un dispositivo.

hal-resmgr (paquete hal-resmgr) es un ejemplo de llamada Device Add Remove (Dispositivo añadido o eliminado). hald utiliza la llamada hal-resmgr para informar a resmgrd acerca de los nuevos dispositivos que se hayan añadido o eliminado. El archivo fdi de hal-resmgr es /usr/share/hal/fdi/policy/10osvendor/80-resmgr.fdi.