HAL ist eine Hardware-Abstraktionsschicht, deren Ziel die Bereitstellung einer Liste der im System vorhandenen Geräte ist. Physische Geräte werden in der Liste als Geräteobjekte gespeichert. Das Geräteobjekt kann jeder adressierbare Teil des Geräts sein.
HAL verwendet eine Netzwerk-API mittels D-BUS zur Abfrage von Geräten sowie zur Benachrichtigung über Änderungen. Darüber hinaus bietet HAL eine nichtintrusive Geräteüberwachung. Zurzeit werden die Erkennung von Ethernet-Verbindungen und das Einhängen von Volumes überwacht.
Die zentrale Komponente von HAL ist der HAL-Dämon, hald. Hierbei handelt es sich um einen Systemdämon, der eine Datenbank mit Geräteobjekten verwaltet. Der Dämon enthält auch Erkennungs- und Überwachungscode für Busse (z. B. PCI- und USB-Busse) und Geräte (z. B. Netzwerk- und Speichergeräte). hald ist für die Verwaltung des Lebenszyklus von Geräteobjekten verantwortlich.
Ein Geräteobjekt besteht aus einem eindeutigen Gerätebezeichner (UDI) und einer Reihe von Eigenschaften in Form von Schlüssel-Wert-Paaren. Die Eigenschaften sind in der HAL-Spezifikation definiert (siehe Abschnitt 5.3, „Weitere Informationen“ (↑Konnektivitätshandbuch)). Sie können neue Eigenschaften hinzufügen oder Eigenschaften über die Geräteinformationsdateien anpassen, die im Verzeichnis /usr/share/hal/fdi gespeichert sind.
Wenn die Geräteobjektliste oder eine Geräteeigenschaft geändert wird, ruft hald Callouts auf. Callouts sind Programme, die zur Verwaltung von Systemrichtlinien verwendet werden können, beispielsweise zur Änderung von Geräteberechtigungen oder zur Aktualisierung der Systemdateien. Man unterscheidet zwischen drei Arten von Callouts:
Alle Callouts dieses Typs sollten sich in der Datei /etc/hal/device.d befinden. Das Callout Device Add (Gerät hinzufügen) wird aufgerufen, nachdem ein Gerät in die globale Geräteliste (GDL) aufgenommen wurde und bevor es durch den D-BUS bekanntgegeben wird. Das Callout Device Remove (Gerät entfernen) wird aufgerufen, wenn ein Gerät entfernt wird. Das Gerät wird erst entfernt, wenn das letzte Callout beendet wurde.
Alle Callouts dieses Typs sollten sich in der Datei /etc/hal/capability.d befinden. Dieses Callout wird aufgerufen, wenn eine Funktion hinzugefügt oder entfernt wurde.
Alle Callouts dieses Typs sollten sich in der Datei /etc/hal/property.d befinden. Dieses Callout wird aufgerufen, wenn eine Geräteeigenschaft hinzugefügt, entfernt oder geändert wurde.
hal-resmgr (Paket hal-resmgr) ist ein Beispiel für ein Device Add Remove-Callout. Das Callout hal-resmgr wird von hald verwendet, um resmgrd über neue und entfernte Geräte zu benachrichtigen. Die fdi-Datei von hal-resmgr ist /usr/share/hal/fdi/policy/10osvendor/80-resmgr.fdi.