Présentation de la couche d'abstraction matérielle

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 binderisés ou passthrough. Dans Android 11, les HAL écrits en AIDL sont également pris en charge. Tous les HAL AIDL sont binderisés.

  • HAL liants . 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 conventionnels et hérités utilisés dans les versions antérieures d'Android. Dans un HAL Binderisé, 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 prendre en charge uniquement les HAL binderisés.

  • HAL Passthrough . HAL conventionnels ou hérités enveloppés dans HIDL. Ces HAL enveloppent les HAL existants et peuvent servir les HAL dans des modes binderisés et de même processus (passthrough). Les appareils mis à niveau vers Android 8.0 peuvent utiliser des HAL passthrough.

Exigences du mode HAL

Appareil Traverser Lié
Lancez-vous avec Android 8.0 Les HAL répertoriés dans Passthrough HAL doivent être passthrough. Tous les autres HAL sont binderisés (y compris les HAL qui sont des extensions de fournisseur).
Mise à niveau vers Android 8.0 Les HAL répertoriés dans Passthrough HAL doivent être passthrough. Les HAL répertoriés dans les HAL liants doivent être liants.
Tous les autres HAL fournis par l’image du fournisseur peuvent être en mode passthrough OU binderisé. Dans un appareil entièrement compatible Treble, tous ces éléments doivent être binderisés.

HAL liants

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

  • android.hardware.biometrics.fingerprint@2.1 . Remplace 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 originale fournie par ce HAL n'a pas pu être calée et a été modifiée. Pour cette raison, dumpstate_board doit être réimplémenté sur un périphérique donné (il s'agit d'un HAL facultatif).
  • android.hardware.graphics.allocator@2.0 . Doit être lié dans Android 8.0 afin que les descripteurs de fichiers n'aient pas besoin d'être partagés entre des processus fiables et non fiables.
  • 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'ancienne bibliothèque Wi-Fi HAL chargée dans system_server
  • android.hardware.wifi.supplicant@1.0 . Une interface HIDL sur le processus wpa_supplicant existant.

HAL Passthrough

Android exige que les HAL suivants soient en mode relais sur tous les appareils Android, qu'il s'agisse d'appareils de lancement ou d'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 . Passe les éléments dans le même processus (équivalent à openGL ).

Tous les HAL non répertoriés ci-dessus doivent être binderisés pour les dispositifs 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 ils sont utilisés. Ils comprennent tous les HAL non exprimés en HIDL ainsi que certains non bindérisés. 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