Tipi 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 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 . Sostituisce fingerprintd 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 da rild 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 in system_server .
  • android.hardware.wifi.supplicant@1.0 . Un'interfaccia HIDL sul processo wpa_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 a openGL ).

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.