HAL 为硬件供应商定义了一个标准接口来实现,这使 Android 能够对较低级别的驱动程序实现不可知论。使用 HAL 允许您在不影响或修改更高级别系统的情况下实现功能。本页介绍了从 Android 8.0 开始不再支持的旧架构。您必须为您的产品提供的特定硬件实现相应的 HAL(和驱动程序)。 HAL 实现通常内置在共享库模块( .so文件)中,但由于 Android 不要求 HAL 实现和设备驱动程序之间进行标准交互,因此您可以根据自己的情况做最好的事情。但是,为了使 Android 系统能够正确地与您的硬件交互,您必须遵守每个特定于硬件的 HAL 接口中定义的协定。

此外, hw_module_t结构包含指向另一个结构hw_module_methods_t的指针,该结构包含指向模块的打开函数的指针。此开放函数用于启动与 HAL 作为抽象的硬件的通信。每个特定于硬件的 HAL 通常使用该特定硬件的附加信息扩展通用hw_module_t结构。例如,在相机 HAL 中, camera_module_t结构体包含一个hw_module_t结构体以及其他相机特定的函数指针:

当您实现 HAL 并创建模块结构时,您必须将其命名为HAL_MODULE_INFO_SYM 。来自 Nexus 9 音频 HAL 的示例:

设备抽象了您产品的硬件。例如,音频模块可以包含主音频设备、USB 音频设备或蓝牙 A2DP 音频设备。

设备由hw_device_t结构表示。与模块类似,每种类型的设备都定义了通用hw_device_t的详细版本,其中包含硬件特定功能的函数指针。例如, audio_hw_device_t结构类型包含指向音频设备操作的函数指针:

除了这些标准属性之外,每个特定于硬件的 HAL 接口都可以定义更多自己的特性和要求。有关详细信息,请参阅HAL 参考文档以及每个 HAL 的单独说明。