Übersicht über die Hardware-Abstraktionsschicht

In Android 8.0 und höher werden die unteren Ebenen neu geschrieben, um eine neue, modularere Architektur zu übernehmen. Geräte mit Android 8.0 und höher müssen in HIDL geschriebene HALs unterstützen, mit einigen unten aufgeführten Ausnahmen. Diese HALs können gebunden oder durchgereicht sein. In Android 11 werden auch in AIDL geschriebene HALs unterstützt. Alle AIDL HALs sind binderisiert.

  • Binderisierte HALs . HALs, ausgedrückt in der HAL-Schnittstellendefinitionssprache (HIDL) oder der Android-Schnittstellendefinitionssprache (AIDL). Diese HALs ersetzen sowohl herkömmliche als auch ältere HALs, die in früheren Android-Versionen verwendet wurden. In einem binderisierten HAL kommunizieren das Android-Framework und die HALs über IPC-Aufrufe (Binder Inter-Process Communication) miteinander. Alle Geräte, die mit Android 8.0 oder höher gestartet werden, dürfen nur binderisierte HALs unterstützen.

  • Passthrough-HALs . Mit HIDL umwickelte konventionelle oder Legacy-HALs. Diese HALs umhüllen vorhandene HALs und können die HAL im gebundenen Modus und im Gleichprozessmodus (Passthrough) bedienen. Geräte, die auf Android 8.0 aktualisieren, können Passthrough-HALs verwenden.

Anforderungen an den HAL-Modus

Gerät Passthrough Mit Bindemittel versehen
Starten Sie mit Android 8.0 In Passthrough aufgeführte HALs müssen Passthrough sein. Alle anderen HALs sind binderisiert (einschließlich HALs, die Herstellererweiterungen sind).
Upgrade auf Android 8.0 In Passthrough aufgeführte HALs müssen Passthrough sein. Die in „Binderisierte HALs“ aufgeführten HALs müssen binderisiert sein.
Alle anderen vom Anbieter-Image bereitgestellten HALs können sich im Passthrough- ODER Binder-Modus befinden. In einem vollständig Treble-kompatiblen Gerät müssen alle diese binderisiert werden.

Binderisierte HALs

Android erfordert die Bindung der folgenden HALs auf allen Android-Geräten, unabhängig davon, ob es sich um Startgeräte oder Upgrade-Geräte handelt:

  • android.hardware.biometrics.fingerprint@2.1 . Ersetzt fingerprintd , das nicht mehr in Android 8.0 enthalten ist.
  • android.hardware.configstore@1.0 . Neu in Android 8.0.
  • android.hardware.dumpstate@1.0 . Die von diesem HAL bereitgestellte ursprüngliche Schnittstelle konnte nicht angepasst werden und wurde geändert. Aus diesem Grund muss dumpstate_board auf einem bestimmten Gerät erneut implementiert werden (dies ist ein optionales HAL).
  • android.hardware.graphics.allocator@2.0 . Muss in Android 8.0 binderisiert werden, damit Dateideskriptoren nicht zwischen vertrauenswürdigen und nicht vertrauenswürdigen Prozessen gemeinsam genutzt werden müssen.
  • android.hardware.radio@1.0 . Ersetzt die von rild bereitgestellte Schnittstelle, die in einem eigenen Prozess lebt.
  • android.hardware.usb@1.0 . Neu in Android 8.0.
  • android.hardware.wifi@1.0 . Neu in Android 8.0, ersetzt die alte Wi-Fi-HAL-Bibliothek, die in system_server geladen wurde
  • android.hardware.wifi.supplicant@1.0 . Eine HIDL-Schnittstelle über den vorhandenen wpa_supplicant Prozess.

Passthrough-HALs

Android erfordert, dass sich die folgenden HALs auf allen Android-Geräten im Passthrough-Modus befinden, unabhängig davon, ob es sich um Startgeräte oder Upgrade-Geräte handelt:

  • android.hardware.graphics.mapper@1.0 . Ordnet das Gedächtnis dem Prozess zu, in dem es lebt.
  • android.hardware.renderscript@1.0 . Übergibt Elemente im selben Prozess (entspricht openGL ).

Alle oben nicht aufgeführten HALs müssen für Startgeräte gebunden werden.

HALs für den gleichen Prozess

Same-Process-HALs (SP-HALs) werden immer im selben Prozess geöffnet, in dem sie verwendet werden. Sie umfassen alle HALs, die nicht in HIDL exprimiert werden, sowie einige, die nicht gebunden sind. Die Mitgliedschaft im SP-HAL-Set wird ausnahmslos nur von Google kontrolliert.

SP-HALs umfassen Folgendes:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (vom Android-System bereitgestellt, immer Passthrough)
  • android.hardware.graphics.mapper@1.0
  • android.hardware.renderscript@1.0