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