HAL 是指硬體抽象層 (Hardware Abstraction Layer),它的目的是要提供系統現有的設備清單。硬體設備會以設備物件形式存放在清單中。設備物件可以是設備可定址的任何部分。
HAL 透過 D-BUS 提供網路 API,以查詢設備並在情況改變時發出通知。最後,HAL 提供一些非侵入性的設備監控方式。現階段受到監控的包括乙太網路連結偵測和磁碟區裝載。
HAL 的核心元件是 HAL 精靈 hald。它是負責維護設備物件資料庫的系統精靈。這個精靈也包含匯流排 (如 PCI 和 USB 匯流排) 和設備 (如網路和儲存設備) 的偵測和監控程式碼。hald 負責管理設備物件的生命週期。
設備物件包含唯一的設備識別碼 (UDI) 和採鍵值對形式的屬性集。屬性於 HAL 規格 (請參閱節 5.3, "更多資訊" (↑連線指南)) 中定義。您可以透過設備資訊檔案新增或調整屬性,這些檔案儲存在 /usr/share/hal/fdi 目錄中。
修改設備物件清單時或設備屬性變更時,hald 會啟用 Callout。Callout 是可用來維護系統規則的程式,例如變更設備許可權或更新系統檔案。Callout 有三種類型:
這類型的所有 Callout 應該位於 /etc/hal/device.d。設備進入全域設備清單 (GDL) 後,但尚未透過 D-BUS 宣告之前,會呼叫 Device Add Callout。設備被移除時,則會呼叫 Device Remove Callout。要等到最後一個 Callout 完成後,設備才會被移除。
這類型的所有 Callout 應該位於 /etc/hal/capability.d。新增或移除功能時,會呼叫這種 Callout。
這類型的所有 Callout 應該位於 /etc/hal/property.d。新增、移除或修改設備屬性時,會呼叫這種 Callout。
hal-resmgr (包裝 hal-resmgr) 就是 Device Add Remove Callout 的一個例子。hald 利用 hal-resmgr Callout 來通知 resmgrd 有新增和移除的設備。hal-resmgr 的 fdi 檔案是 /usr/share/hal/fdi/policy/10osvendor/80-resmgr.fdi。