5.2. Hardware Abstraction Layer (HAL)

HAL rappresenta un livello di astrazione hardware che ha lo scopo di fornire un elenco dei dispositivi presenti nel sistema. I dispositivi fisici inclusi nell'elenco vengono memorizzati come oggetti dispositivo. Un oggetto dispositivo rappresenta una qualsiasi parte indirizzabile del dispositivo.

HAL fornisce un'API di rete mediante D-BUS per le query ai dispositivi e la notifica di eventuali modifiche. Infine, HAL include alcuni sistemi per il monitoraggio non interno dei dispositivi. Attualmente vengono monitorati i rilevamenti dei collegamenti ethernet e i montaggi di volumi.

Il daemon HAL, o hald, rappresenta il componente centrale di HAL. Si tratta di un daemon di sistema che gestisce un database di oggetti dispositivo. Questo daemon include inoltre un codice di rilevamento e monitoraggio per bus, quali PCI e USB, e dispositivi ad esempio di rete e di memorizzazione. hald è anche responsabile della gestione del ciclo di vita degli oggetti dispositivo.

Un oggetto dispositivo è costituito da un identificatore di dispositivo univoco (UDI) e da un insieme di proprietà espresse in coppie di chiavi e valori. Le proprietà sono definite nella specifica HAL (vedere la Sezione 5.3, "Ulteriori informazioni" (↑Guida alla connettività)). È possibile aggiungere nuove proprietà oppure modificarle mediante i file delle informazioni sul dispositivo memorizzati nella directory /usr/share/hal/fdi.

Quando si modifica un elenco di oggetti dispositivo oppure una proprietà di un dispositivo, hald invoca i callout. I callout sono programmi che è possibile utilizzare per gestire i criteri del sistema, quali la modifica alle autorizzazioni dei dispositivi o l'aggiornamento dei file di sistema. Esistono tre tipi di callout:

Aggiunta o rimozione di dispositivo

Tutti i callout di questo tipo devono risiedere in /etc/hal/device.d. Il callout Aggiunta dispositivo viene invocato dopo l'immissione di un elenco di dispositivi globali (GDL) da parte di un dispositivo e prima che questo elenco venga annunciato mediante D-BUS. Il callout Rimozione dispositivo, invece, viene invocato al momento della rimozione di un dispositivo. Il dispositivo viene rimosso solo dopo il completamento dell'ultimo callout.

Aggiunta o rimozione di funzionalità

Tutti i callout di questo tipo devono risiedere in /etc/hal/capability.d. Questo callout viene invocato dopo l'aggiunta o la rimozione di una funzionalità.

Modifica di proprietà

Tutti i callout di questo tipo devono risiedere in /etc/hal/property.d. Questo callout viene invocato dopo l'aggiunta, la rimozione o la modifica di una proprietà del dispositivo.

hal-resmgr (pacchetto hal-resmgr) è un esempio di callout Aggiunta o rimozione di dispositivo. Il callout hal-resmgr viene utilizzato da hald per inviare notifiche a resmgrd sulla rimozione o l'aggiunta di dispositivi. Il file fdi di hal-resmgr è /usr/share/hal/fdi/policy/10osvendor/80-resmgr.fdi.