硬件抽象层概览

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

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

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

HAL 模式要求

设备直通粘合剂化
搭载 Android 8.0 启动直通 HAL中列出的 HAL 必须是直通的。所有其他 HAL 均已绑定(包括作为供应商扩展的 HAL)。
升级至安卓8.0直通 HAL中列出的 HAL 必须是直通的。绑定 HAL 中列出的 HAL必须进行绑定。
供应商映像提供的所有其他 HAL 都可以处于直通或绑定模式。在完全符合 Treble 标准的设备中,所有这些都必须进行绑定。

粘合剂化的 HAL

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

  • 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
  • android.hardware.renderscript@1.0