硬件抽象层 (HAL) 概述

在 Android 8.0 及更高版本中,较低级别的层被重新编写以采用新的、更加模块化的架构。运行 Android 8.0 及更高版本的设备必须支持以 HIDL 编写的 HAL,但下面列出了一些例外情况。这些 HAL 可以绑定或直通。在 Android 11 中,还支持使用 AIDL 编写的 HAL。所有 AIDL HAL 都是绑定的。

  • 绑定的 HAL 。 HAL 以 HAL 接口定义语言 (HIDL) 或 Android 接口定义语言 (AIDL) 表示。这些 HAL 取代了早期 Android 版本中使用的传统 HAL 和遗留 HAL。在 Binderized HAL 中,Android 框架和 HAL 使用 Binder 进程间通信 (IPC) 调用相互通信。所有搭载 Android 8.0 或更高版本的设备必须仅支持绑定化 HAL。

  • 直通 HAL 。 HIDL 封装的传统 HAL 或旧版 HAL这些 HAL 封装了现有的 HAL,并且可以在绑定化和相同进程(直通)模式下为 HAL 提供服务。升级到 Android 8.0 的设备可以使用直通 HAL。

HAL 模式要求

设备透传粘合剂化
使用 Android 8.0 启动直通 HAL 中列出的 HAL必须是直通的。所有其他 HAL 都已绑定(包括作为供应商扩展的 HAL)。
升级到安卓8.0直通 HAL 中列出的 HAL必须是直通的。 Binderized HAL中列出的 HAL 必须经过绑定。
供应商映像提供的所有其他 HAL 都可以处于直通或绑定模式。在完全兼容 Treble 的设备中,所有这些都必须绑定。

绑定 HAL

Android 要求在所有 Android 设备上绑定以下 HALS,无论它们是启动设备还是升级设备:

  • android.hardware.biometrics.fingerprint@2.1 。替换 Android 8.0 中不再存在的 `fingerprintd。
  • android.hardware.configstore@1.0 。 Android 8.0 中的新功能。
  • android.hardware.dumpstate@1.0 。此HAL 提供的原始接口无法填充并更改。因此,必须在给定设备上重新实现dumpstate_board (这是一个可选的 HAL)。
  • android.hardware.graphics.allocator@2.0 。需要在 Android 8.0 中进行绑定,这样文件描述符就不必在受信任和不受信任的进程之间共享。
  • android.hardware.radio@1.0 。替换rild提供的接口,它存在于自己的进程中。
  • android.hardware.usb@1.0 。 Android 8.0 中的新功能。
  • android.hardware.wifi@1.0 。 Android 8.0 中的新功能,替换了加载到system_server中的旧版 Wi-Fi HAL 库
  • android.hardware.wifi.supplicant@1.0 。现有wpa_supplicant进程上的 HIDL 接口。

直通 HAL

Android 要求以下 HAL 在所有 Android 设备上都处于直通模式,无论它们是启动设备还是升级设备:

  • android.hardware.graphics.mapper@1.0 。将内存映射到它所在的进程中。
  • android.hardware.renderscript@1.0 。在同一进程中传递项目(相当于openGL )。

上面未列出的所有 HAL 都必须为启动设备绑定。

同进程 HAL

同一进程 HAL (SP-HAL) 始终在使用它们的同一进程中打开。它们包括所有未在 HIDL 中表达的 HAL 以及一些未绑定的 HAL。 SP-HAL 集中的成员资格仅由 Google 控制,无一例外。

SP-HAL 包括以下内容:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (Android系统提供,始终直通)
  • android.hardware.graphics.mapper@1.0</code>
  • android.hardware.renderscript@1.0