硬件抽象层 (HAL) 概述

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

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

  • 绑定的 HAL。以 HAL 接口定义语言 (HIDL) 或 Android 接口定义语言 (AIDL) 表示的 HAL。这些 HAL 取代了早期 Android 版本中使用的传统和传统 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必须是直通的。 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 接口。

注意:Android 提供以下 HIDL 接口,它们将始终处于绑定模式: android.frameworks.*android.system.*android.hidl.* (除了android.hidl.memory@1.0 ,如下所述)。

直通式 HAL

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

  • 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

传统和传统 HAL

常规 HAL(在 Android 8.0 中已弃用)是符合特定命名和版本化应用程序二进制接口 (ABI) 的接口。大部分 Android 系统接口(摄像头音频传感器等)采用传统 HAL 的形式,定义在hardware/libhardware/include/hardware下。

旧版 HAL(在 Android 8.0 中也已弃用)是早于传统 HAL 的接口。一些重要的子系统(Wi-Fi、无线电接口层和蓝牙)是传统 HAL。虽然没有统一或标准化的方式来描述旧版 HAL,但任何早于 Android 8.0 且不是传统 HAL 的东西都是旧版 HAL。一些遗留 HAL 的一部分包含在libhardware_legacy中,而其他部分则散布在整个代码库中。