Panoramica del livello di astrazione hardware (HAL).

In Android 8.0 e versioni successive, i livelli di livello inferiore vengono riscritti per adottare una nuova architettura più modulare. I dispositivi con Android 8.0 e versioni successive devono supportare gli HAL scritti in HIDL, con alcune eccezioni elencate di seguito. Questi HAL possono essere binderizzati o passthrough. In Android 11 sono supportati anche gli HAL scritti in AIDL. Tutti gli HAL AIDL sono binderizzati.

  • HAL binderizzati . HAL espressi nel linguaggio di definizione dell'interfaccia HAL (HIDL) o nel linguaggio di definizione dell'interfaccia Android (AIDL). Questi HAL sostituiscono sia gli HAL tradizionali che quelli precedenti utilizzati nelle versioni precedenti di Android. In un HAL binderizzato, il framework Android e gli HAL comunicano tra loro utilizzando le chiamate IPC (inter-process communication) del binder. Tutti i dispositivi che vengono avviati con Android 8.0 o versioni successive devono supportare solo HAL binderizzati.

  • HAL passthrough . Un HAL convenzionale o Legacy con wrapping HIDL Questi HAL eseguono il wrapping di HAL esistenti e possono servire l'HAL in modalità binderizzata e stesso processo (passthrough). I dispositivi che eseguono l'aggiornamento ad Android 8.0 possono utilizzare gli HAL passthrough.

Requisiti della modalità HAL

Dispositivo Passante Legato
Avvia con Android 8.0 Gli HAL elencati negli HAL passthrough devono essere passthrough. Tutti gli altri HAL sono binderizzati (inclusi gli HAL che sono estensioni del fornitore).
Aggiorna ad Android 8.0 Gli HAL elencati negli HAL passthrough devono essere passthrough. Gli HAL elencati in HAL binderizzati devono essere binderizzati.
Tutti gli altri HAL forniti dall'immagine del fornitore possono essere in modalità passthrough OPPURE binderizzata. In un dispositivo completamente compatibile con Treble, tutti questi devono essere binderizzati.

HAL leganti

Android richiede che i seguenti HALS siano binderizzati su tutti i dispositivi Android, indipendentemente dal fatto che si tratti di dispositivi di avvio o dispositivi di aggiornamento:

  • android.hardware.biometrics.fingerprint@2.1 . Sostituisce `fingerprintd che non è più in Android 8.0.
  • android.hardware.configstore@1.0 . Nuovo in Android 8.0.
  • android.hardware.dumpstate@1.0 . L'interfaccia originale fornita da questo HAL non poteva essere sottoposta a shimming ed è stata modificata. Per questo motivo, dumpstate_board deve essere reimplementato su un dato dispositivo (si tratta di un HAL facoltativo).
  • android.hardware.graphics.allocator@2.0 . Richiesto per essere binderizzato in Android 8.0 in modo che i descrittori di file non debbano essere condivisi tra processi attendibili e non attendibili.
  • android.hardware.radio@1.0 . Sostituisce l'interfaccia fornita da rild che vive nel proprio processo.
  • android.hardware.usb@1.0 . Nuovo in Android 8.0.
  • android.hardware.wifi@1.0 . Nuovo in Android 8.0, sostituisce la precedente libreria HAL Wi-Fi caricata in system_server
  • android.hardware.wifi.supplicant@1.0 . Un'interfaccia HIDL sul processo wpa_supplicant esistente.

HAL passthrough

Android richiede che i seguenti HAL siano in modalità passthrough su tutti i dispositivi Android, indipendentemente dal fatto che si tratti di dispositivi di avvio o dispositivi di aggiornamento:

  • android.hardware.graphics.mapper@1.0 . Mappa la memoria nel processo in cui vive.
  • android.hardware.renderscript@1.0 . Passa gli elementi nello stesso processo (equivalente a openGL ).

Tutti gli HAL non elencati sopra devono essere binderizzati per i dispositivi di lancio.

HAL con lo stesso processo

Gli HAL Same-Process (SP-HAL) si aprono sempre nello stesso processo in cui vengono utilizzati. Includono tutti gli HAL non espressi in HIDL così come alcuni che non sono binderizzati. L'appartenenza al set SP-HAL è controllata solo da Google, senza eccezioni.

Gli SP-HAL includono quanto segue:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (fornito dal sistema Android, sempre passthrough)
  • android.hardware.graphics.mapper@1.0</code>
  • android.hardware.renderscript@1.0