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中,而其他部分則散佈在整個代碼庫中。