硬體抽象層概述

在 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