Panoramica del livello di astrazione hardware (HAL).

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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 leganti. 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 avvolto in HIDL. Questi HAL racchiudono gli HAL esistenti e possono servire l'HAL in modalità binderized 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 libreria HAL Wi-Fi legacy 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 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 .
  • 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 maggior parte delle interfacce di sistema Android ( fotocamera , audio , sensori , ecc.) sono sotto forma di HAL convenzionali, definiti in hardware/libhardware/include/hardware .

Gli HAL legacy (anch'essi deprecati in Android 8.0) sono interfacce che precedono gli 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 contenute in libhardware_legacy , mentre altre parti sono disseminate in tutta la codebase.