Panoramica del livello di astrazione hardware

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 convenzionali che quelli legacy utilizzati nelle versioni precedenti di Android. In un HAL Binderizzato, 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 binderizzati.

  • HAL passthrough . HAL convenzionali o legacy con wrapper HIDL Questi HAL racchiudono HAL esistenti e possono servire l'HAL in modalità binderized e same-process (passthrough). I dispositivi che eseguono l'aggiornamento ad Android 8.0 possono utilizzare 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 o binderizzata. In un dispositivo completamente compatibile con Treble, tutti questi devono essere binderizzati.

HAL binderizzati

Android richiede che i seguenti HAL siano binderizzati su tutti i dispositivi Android, indipendentemente dal fatto che siano 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à in Android 8.0.
  • android.hardware.dumpstate@1.0 . Non è stato possibile modificare l'interfaccia originale fornita da questo HAL ed è stata modificata. Per questo motivo, dumpstate_board deve essere reimplementato su un determinato dispositivo (si tratta di un HAL opzionale).
  • android.hardware.graphics.allocator@2.0 . È necessario che siano binderizzati 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 risiede nel proprio processo.
  • android.hardware.usb@1.0 . Novità in Android 8.0.
  • android.hardware.wifi@1.0 . Novità 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.

HAL passthrough

Android richiede che i seguenti HAL siano in modalità passthrough su tutti i dispositivi Android, indipendentemente dal fatto che siano 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 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 e alcuni non 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