Tipi di 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 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 leganti. HAL espressi in linguaggio di definizione dell'interfaccia HAL (HIDL) o linguaggio di definizione dell'interfaccia Android (AIDL). Questi HAL sostituiscono gli HAL convenzionali e legacy utilizzati nelle versioni precedenti di Android. In un HAL Binderized, il framework Android e gli HAL comunicano tra loro tramite chiamate IPC (Comunicazione tra processi del raccoglitore). Tutti i dispositivi che si avviano con Android 8.0 o versioni successive devono supportare solo HAL binderizzati.
  • HAL passanti. Un HIDL-avvolto convenzionale o HAL legacy . Questi HAL avvolgono gli HAL esistenti e possono servire l'HAL in modalità binderizzata e con lo stesso processo (passthrough). I dispositivi che eseguono l'aggiornamento ad Android 8.0 possono utilizzare HAL passthrough.

Requisiti della modalità HAL

Dispositivo Passthrough legante
Avvia con Android 8.0 HAL elencati HAL Passthrough devono essere passthrough. Tutti gli altri HAL sono binderizzati (inclusi gli HAL che sono estensioni del fornitore).
Aggiorna ad Android 8.0 HAL elencati HAL Passthrough devono essere passthrough. HAL elencati HAL Binderized devono essere binderized.
Tutti gli altri HAL forniti dall'immagine del fornitore possono essere in modalità passthrough OR binderized. In un dispositivo completamente compatibile con Treble, tutti questi devono essere rilegati.

HAL leganti

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

  • android.hardware.biometrics.fingerprint@2.1 . Sostituisce fingerprintd che non è più in Android 8.0.
  • android.hardware.configstore@1.0 . Novità di Android 8.0.
  • android.hardware.dumpstate@1.0 . Non è stato possibile eseguire lo shim dell'interfaccia originale fornita da questo HAL ed è stata modificata. A causa di questo, dumpstate_board deve essere nuovamente implementato su un dato dispositivo (questa è una HAL opzionale).
  • android.hardware.graphics.allocator@2.0 . Necessario 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 . Novità di Android 8.0.
  • android.hardware.wifi@1.0 . Nuovo in Android 8.0, sostituisce l'eredità biblioteca Wi-Fi HAL che è stato caricato in system_server .
  • android.hardware.wifi.supplicant@1.0 . Un'interfaccia HIDL su quella esistente wpa_supplicant processo.

NOTA: Android fornisce le seguenti interfacce HIDL che sarà sempre in modalità binderized: android.frameworks.* , android.system.* , E android.hidl.* (Eccetto android.hidl.memory@1.0 come descritto di seguito).

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 di aggiornamento:

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

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

HAL con lo stesso processo

Gli HAL dello stesso processo (SP-HAL) si aprono sempre nello stesso processo in cui vengono utilizzati. Essi comprendono tutti HAL non espressi in HIDL e anche alcuni che non sono binderized. 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 (fornita dal sistema Android, sempre passthrough)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

HAL convenzionali e legacy

Gli HAL convenzionali (deprecati in Android 8.0) sono interfacce conformi a un'interfaccia binaria dell'applicazione (ABI) specifica con nome e versione. La massa di interfacce di sistema Android ( fotocamera , audio , sensori , ecc) sono in forma di HAL convenzionali, che sono definiti sotto hardware / libhardware / include / hardware .

Gli HAL legacy (deprecati anche in Android 8.0) sono interfacce precedenti agli HAL convenzionali. Alcuni importanti sottosistemi (Wi-Fi, Radio Interface Layer e Bluetooth) sono HAL legacy. Sebbene non esista un modo uniforme o standardizzato per descrivere un HAL legacy, qualsiasi cosa precedente ad Android 8.0 che non sia un HAL convenzionale è un HAL legacy. Parti di alcuni HAL legacy sono contenuti in libhardware_legacy , mentre altre parti sono intervallati in tutta la base di codice.