硬件抽象層 (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 和遺留 HAL。在 Binderized HAL 中,Android 框架和 HAL 使用 Binder 進程間通信 (IPC) 調用相互通信。所有搭載 Android 8.0 或更高版本的設備必須僅支持綁定化 HAL。

  • 直通 HAL 。 HIDL 包裝的傳統 HAL 或舊版 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 接口。

直通 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