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 vincolati o passthrough. In Android 11 sono supportati anche gli HAL scritti in AIDL. Tutti gli HAL AIDL sono vincolati.
- HAL leganti. HAL espressi in HAL Interface Definition Language (HIDL) o Android Interface Definition Language (AIDL). Questi HAL sostituiscono sia gli HAL tradizionali che quelli legacy utilizzati nelle versioni precedenti di Android. In un HAL legato, il framework Android e gli HAL comunicano tra loro utilizzando chiamate IPC (Binder Inter-Process Communication). Tutti i dispositivi avviati con Android 8.0 o versioni successive devono supportare solo HAL vincolati.
- HAL passanti. Un HAL convenzionale o legacy avvolto in HIDL . Questi HAL avvolgono gli HAL esistenti e possono servire l'HAL in modalità binderized e dello stesso processo (passthrough). I dispositivi che eseguono l'aggiornamento ad Android 8.0 possono utilizzare HAL passthrough.
Requisiti della modalità HAL
Dispositivo | Passaggio | Legato |
---|---|---|
Avvia con Android 8.0 | Gli HAL elencati in Passthrough HAL devono essere passthrough. | Tutti gli altri HAL sono vincolati (inclusi gli HAL che sono estensioni del fornitore). |
Esegui l'aggiornamento ad Android 8.0 | Gli HAL elencati in Passthrough HAL devono essere passthrough. | Gli HAL elencati in HAL vincolati devono essere vincolati. |
Tutti gli altri HAL forniti dall'immagine del fornitore possono essere in modalità passthrough O binderizzata. In un dispositivo completamente compatibile con Treble, tutti questi devono essere vincolati. |
HAL leganti
Android richiede che i seguenti HALS siano vincolati su tutti i dispositivi Android indipendentemente dal fatto che siano dispositivi di avvio o dispositivi di aggiornamento:
-
android.hardware.biometrics.fingerprint@2.1
. Sostituiscefingerprintd
che non è più in Android 8.0. -
android.hardware.configstore@1.0
. Novità in Android 8.0. -
android.hardware.dumpstate@1.0
. L'interfaccia originale fornita da questo HAL non poteva essere modificata ed è stata modificata. Per questo motivo,dumpstate_board
deve essere implementato nuovamente su un determinato dispositivo (questo è un HAL opzionale). -
android.hardware.graphics.allocator@2.0
. Necessario per essere legato 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 darild
che vive nel proprio processo. -
android.hardware.usb@1.0
. Novità in Android 8.0. -
android.hardware.wifi@1.0
. Nuovo in Android 8.0, sostituisce la libreria HAL Wi-Fi legacy che è stata caricata insystem_server
. -
android.hardware.wifi.supplicant@1.0
. Un'interfaccia HIDL sul processowpa_supplicant
esistente.
NOTA : Android fornisce le seguenti interfacce HIDL che saranno sempre in modalità binderizzata: android.frameworks.*
, android.system.*
e android.hidl.*
(ad eccezione di android.hidl.memory@1.0
come descritto di seguito).
HAL passanti
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 gli elementi nello stesso processo (equivalente aopenGL
).
Tutti gli HAL non elencati sopra devono essere vincolati 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. Includono tutti gli HAL non espressi in HIDL e alcuni che non sono vincolati. 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
. -
android.hardware.renderscript@1.0
HAL convenzionali e legacy
Gli HAL convenzionali (obsoleti in Android 8.0) sono interfacce conformi a un'interfaccia binaria dell'applicazione (ABI) specifica con nome e versione. La maggior parte delle interfacce di sistema Android ( fotocamera , audio , sensori , ecc.) sono sotto forma di HAL convenzionali, che sono definiti in hardware/libhardware/include/hardware .
Gli HAL legacy (deprecati anche in Android 8.0) sono interfacce precedenti agli HAL convenzionali. Alcuni sottosistemi importanti (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 contenute in libhardware_legacy , mentre altre parti sono disseminate nella codebase.