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。在 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 Binderized的HAL必須binderized。
供應商映像提供的所有其他 HAL 可以處於直通或綁定模式。在完全兼容 Treble 的設備中,所有這些都必須綁定。

綁定 HAL

Android 要求在所有 Android 設備上綁定以下 HALS,無論它們是啟動設備還是升級設備:

  • android.hardware.biometrics.fingerprint@2.1 。替代對象fingerprintd這是安卓8.0不再。
  • 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,取代了加載到傳統的Wi-Fi無線HAL庫system_server
  • android.hardware.wifi.supplicant@1.0 。一個HIDL接口在現有wpa_supplicant過程。

:Android提供以下HIDL接口,這將始終處於binderized模式: android.frameworks.*android.system.* ,和android.hidl.*除了android.hidl.memory@1.0如下面所描述的)。

直通 HAL

Android 要求以下 HAL 在所有 Android 設備上都處於直通模式,無論它們是啟動設備還是升級設備:

  • android.hardware.graphics.mapper@1.0 。將內存映射到它所在的進程中。
  • android.hardware.renderscript@1.0 。通過在同一個進程(相當於項目openGL )。

上面未列出的所有 HAL 都必須針對啟動設備進行綁定。

同進程 HAL

同進程 HAL (SP-HAL) 始終在使用它們的同一進程中打開。它們包括HIDL不表示所有的HAL以及一些binderized。 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,其在限定的形式的硬件/ libhardware /包含/硬件

舊版 HAL(也在 Android 8.0 中棄用)是早於傳統 HAL 的接口。一些重要的子系統(Wi-Fi、無線電接口層和藍牙)是傳統 HAL。雖然沒有統一或標準化的方式來描述舊版 HAL,但在 Android 8.0 之前的任何不是傳統 HAL 的東西都是舊版 HAL。一些遺留的HAL的部分包含在libhardware_legacy ,而其他部分在整個代碼庫穿插。