HAL-Typen

In Android 8.0 und höher werden die untergeordneten Schichten 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 Ausnahmen, die unten aufgeführt sind. Diese HALs können gebunden oder passthrough sein. In Android 11 werden auch in AIDL geschriebene HALs unterstützt. Alle AIDL HALs sind gebunden.

  • Binderisierte HALs. HALs, die in der HAL-Schnittstellendefinitionssprache (HIDL) oder der Android-Schnittstellendefinitionssprache (AIDL) ausgedrückt werden. Diese HALs ersetzen sowohl konventionelle als auch ältere HALs, die in früheren Android-Versionen verwendet wurden. In einer gebundenen HAL kommunizieren das Android-Framework und die HALs miteinander mithilfe von Binder-Interprozesskommunikationsaufrufen (IPC). Alle Geräte, die mit Android 8.0 oder höher gestartet werden, müssen nur binderisierte HALs unterstützen.
  • Passthrough-HALs. Eine herkömmliche oder HIDL umwickelten Vermächtnis HAL . Diese HALs umschließen vorhandene HALs und können die HAL im gebundenen Modus und im gleichen Prozess (Durchgangsmodus) bedienen. Geräte, die auf Android 8.0 aktualisiert werden, können Passthrough-HALs verwenden.

Anforderungen an den HAL-Modus

Gerät Passthrough Binder
Starten Sie mit Android 8.0 HALs in aufgelistet Pass - Through HALs muß Pass - Through sein. Alle anderen HALs sind gebunden (einschließlich HALs, die Herstellererweiterungen sind).
Upgrade auf Android 8.0 HALs in aufgelistet Pass - Through HALs muß Pass - Through sein. HALs in aufgelistet mit Bindemittel HALs muss mit Bindemittel werden.
Alle anderen HALs, die vom Anbieterimage bereitgestellt werden, können sich im Passthrough- ODER im Bindemodus befinden. In einem vollständig Treble-kompatiblen Gerät müssen diese alle gebunden werden.

Binderisierte HALs

Android erfordert, dass die folgenden HALS auf allen Android-Geräten gebunden werden, unabhängig davon, ob es sich um Startgeräte oder Upgrade-Geräte handelt:

  • android.hardware.biometrics.fingerprint@2.1 . Ersetzt fingerprintd die in Android 8.0 nicht mehr.
  • android.hardware.configstore@1.0 . Neu in Android 8.0.
  • android.hardware.dumpstate@1.0 . Die von dieser HAL bereitgestellte ursprüngliche Schnittstelle konnte nicht geshimmt werden und wurde geändert. Wegen dieses dumpstate_board müssen neu implementiert , die auf einem bestimmten Gerät (dies ist eine optionale HAL).
  • android.hardware.graphics.allocator@2.0 . Muss in Android 8.0 gebunden werden, damit Dateideskriptoren nicht zwischen vertrauenswürdigen und nicht vertrauenswürdigen Prozessen geteilt werden müssen.
  • android.hardware.radio@1.0 . Ersetzt die Schnittstelle bereitgestellt durch rild , 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 Legacy - Wi-Fi - HAL - Bibliothek , die in geladen wurde system_server .
  • android.hardware.wifi.supplicant@1.0 . Eine HIDL Schnittstelle über den bestehenden wpa_supplicant Prozess.

HINWEIS: Android bietet das folgende HIDL Schnittstellen , die immer im Modus mit Bindemittel sein: android.frameworks.* , android.system.* , Und android.hidl.* ( Mit Ausnahme android.hidl.memory@1.0 wie unten beschrieben).

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 . Pässe Elemente im gleichen Prozess (äquivalent zu openGL ).

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

Same-Process-HALs

Same-Process-HALs (SP-HALs) öffnen immer im gleichen Prozess, in dem sie verwendet werden. Sie umfassen alle Hälse nicht in HIDL ausgedrückt sowie einige , die nicht mit Bindemittel sind. Die Mitgliedschaft im SP-HAL-Set wird ohne Ausnahmen nur von Google kontrolliert.

SP-HALs umfassen Folgendes:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 ( zur Verfügung gestellt von dem Android - System, immer pass - through)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

Konventionelle und ältere HALs

Herkömmliche HALs (in Android 8.0 veraltet) sind Schnittstellen, die einer bestimmten benannten und versionierten Anwendungsbinärschnittstelle (ABI) entsprechen. Der Großteil der Android Systemschnittstellen ( Kamera , Audio , Sensoren , etc.) ist in der Form von herkömmlichem HALS , die unter definierten Hardware / libhardware / include / Hardware .

Legacy-HALs (auch veraltet in Android 8.0) sind Schnittstellen, die vor herkömmlichen HALs liegen. Einige wichtige Subsysteme (Wi-Fi, Radio Interface Layer und Bluetooth) sind Legacy-HALs. Obwohl es keine einheitliche oder standardisierte Möglichkeit gibt, eine Legacy-HAL zu beschreiben, ist alles, was vor Android 8.0 keine konventionelle HAL ist, eine Legacy-HAL. Teile einiger Legacy - HALs sind enthalten libhardware_legacy , während andere Teile in der Code - Basis durchsetzt sind.