Types HAL

Dans Android 8.0 et versions ultérieures, les couches de niveau inférieur sont réécrites pour adopter une nouvelle architecture plus modulaire. Les appareils exécutant Android 8.0 et versions ultérieures doivent prendre en charge les HAL écrits en HIDL, à quelques exceptions près répertoriées ci-dessous. Ces HAL peuvent être bindérisés ou passthrough. Dans Android 11, les HAL écrits en AIDL sont également pris en charge. Tous les HAL AIDL sont liés.

  • HALs reliés. HAL exprimés en langage de définition d'interface HAL (HIDL) ou en langage de définition d'interface Android (AIDL). Ces HAL remplacent les HAL classiques et hérités utilisés dans les versions antérieures d'Android. Dans un HAL Binderized, le framework Android et les HAL communiquent entre eux à l'aide d'appels de communication inter-processus (IPC) de classeur. Tous les appareils lancés avec Android 8.0 ou version ultérieure doivent uniquement prendre en charge les HAL liés.
  • HAL de passage. Un HIDL-enveloppé classique ou HAL héritage . Ces HAL enveloppent les HAL existants et peuvent servir la HAL en modes binderized et même processus (passthrough). Les appareils mis à niveau vers Android 8.0 peuvent utiliser des HAL passthrough.

Exigences du mode HAL

Dispositif Traverser Relié
Lancer avec Android 8.0 HALs énumérés dans Passthrough HALs doivent être passthrough. Tous les autres HAL sont liés (y compris les HAL qui sont des extensions de fournisseur).
Mise à niveau vers Android 8.0 HALs énumérés dans Passthrough HALs doivent être passthrough. HALs énumérés dans Binderized HALs doivent être binderized.
Tous les autres HAL fournis par l'image du fournisseur peuvent être en mode passthrough OU en mode binderisé. Dans un appareil entièrement compatible Treble, tous ces éléments doivent être binderisés.

HAL liés

Android nécessite que les HALS suivants soient liés sur tous les appareils Android, qu'il s'agisse d'appareils de lancement ou de mise à niveau :

  • android.hardware.biometrics.fingerprint@2.1 . Replaces fingerprintd qui n'est plus dans Android 8.0.
  • android.hardware.configstore@1.0 . Nouveau dans Android 8.0.
  • android.hardware.dumpstate@1.0 . L'interface d'origine fournie par cette HAL n'a pas pu être calée et a été modifiée. À cause de cela, dumpstate_board doit être à nouveau mis en œuvre sur un appareil donné (ce qui est un HAL en option).
  • android.hardware.graphics.allocator@2.0 . Nécessité d'être lié dans Android 8.0 afin que les descripteurs de fichiers n'aient pas à être partagés entre les processus approuvés et non approuvés.
  • android.hardware.radio@1.0 . Remplace l'interface fournie par rild qui vit dans son propre processus.
  • android.hardware.usb@1.0 . Nouveau dans Android 8.0.
  • android.hardware.wifi@1.0 . Nouveau dans Android 8.0, remplace l'héritage bibliothèque Wi-Fi HAL qui a été chargé dans system_server .
  • android.hardware.wifi.supplicant@1.0 . Une interface HIDL sur l'existant wpa_supplicant processus.

REMARQUE: Android fournit les interfaces suivantes HIDL qui seront toujours en mode binderized: android.frameworks.* , android.system.* , Et android.hidl.* (Sauf android.hidl.memory@1.0 comme décrit ci - dessous).

HAL de passage

Android nécessite que les HAL suivants soient en mode passthrough sur tous les appareils Android, qu'ils soient des appareils de lancement ou des appareils de mise à niveau :

  • android.hardware.graphics.mapper@1.0 . Mappe la mémoire dans le processus dans lequel elle vit.
  • android.hardware.renderscript@1.0 . Laissez - passer les objets dans le même processus (équivalent à openGL ).

Tous les HAL non répertoriés ci-dessus doivent être liés pour les périphériques de lancement.

HAL de même processus

Les HAL de même processus (SP-HAL) s'ouvrent toujours dans le même processus dans lequel elles sont utilisées. Ils comprennent tous HALs non exprimés dans HIDL ainsi que certains qui ne sont pas binderized. L'adhésion à l'ensemble SP-HAL est contrôlée uniquement par Google, sans exception.

Les SP-HAL comprennent les éléments suivants :

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (fourni par le système Android, toujours passthrough)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

HAL conventionnels et hérités

Les HAL classiques (obsolètes dans Android 8.0) sont des interfaces conformes à une interface binaire d'application (ABI) nommée et versionnée. La majeure partie des interfaces système (applications appareil photo , audio , capteurs , etc.) sont sous la forme de HALS classiques, qui sont définis sous hardware / libhardware / include / matériel .

Les anciennes HAL (également dépréciées dans Android 8.0) sont des interfaces antérieures aux HAL conventionnelles. Quelques sous-systèmes importants (Wi-Fi, couche d'interface radio et Bluetooth) sont des HAL hérités. Bien qu'il n'y ait pas de manière uniforme ou standardisée de décrire une HAL héritée, tout ce qui est antérieur à Android 8.0 et qui n'est pas une HAL conventionnelle est une HAL héritée. Des parties de certaines Hals anciens sont contenus dans libhardware_legacy , tandis que d' autres sont intercalées dans la base de code.