HAL 是一个硬件抽象层,旨在提供系统中的设备列表。物理设备以设备对象的形式储存在列表中。设备对象可以是设备的任意可寻址部分。
HAL 通过 D-BUS 提供网络 API,用来查询设备并在情况发生变化时发出通知。最后,HAL 对设备进行某种非侵犯式监视。目前,Ethernet 链接检测及卷装入都受到了监视。
HAL 的中央组件是 HAL 守护程序 hald。维护设备对象数据库的就是一个系统守护程序。该守护程序也包含对总线(如 PCI 和 USB 总线)及设备(如网络和储存设备)的检测和监视代码。hald 负责管理设备对象的生命周期。
设备对象包括唯一的设备标识符 (UDI) 和一套密钥和值对属性。属性用 HAL 规范定义(请参阅第 5.3 节 “参考信息” (↑连接指南))。您可以添加新属性或通过储存在 /usr/share/hal/fdi 目录中的设备信息文件对其进行调整。
当设备对象被修改或当设备属性有变化时,hald 将调用调出程序。调出程序是用于维护系统策略(如改变设备许可权限或更新系统文件)的程序。共有六种调出程序:
该类型所有的调出程序均应该位于 /etc/hal/device.d。设备添加调出程序将在设备进入全局设备列表 (GDL) 之后并通过 D-BUS 宣布之前调用。设备去除调出程序将在设备要去除时调用。该设备要在最后的调出程序完成之后才能去除。
该类型所有的调出程序均应该位于 /etc/hal/capability.d。该调出程序将在添加功能或去除功能时调用。
该类型所有的调出程序均应该位于 /etc/hal/property.d。该调出程序将在添加设备属性、去除设备属性或修改设备属性时调用。
hal-resmgr(hal-resmgr 包)是一个 Device Add Remove 调出程序的例子。hald 使用 hal-resmgr 来通知 resmgrd 新设备及去除设备的情况。hal-resmgr 的 fdi 文件是 /usr/share/hal/fdi/policy/10osvendor/80-resmgr.fdi。