Visão geral da camada de abstração de hardware

No Android 8.0 e versões posteriores, as camadas de nível inferior são reescritas para adotar uma arquitetura nova e mais modular. Os dispositivos que executam o Android 8.0 e superior devem oferecer suporte a HALs escritos em HIDL, com algumas exceções listadas abaixo. Esses HALs podem ser binderizados ou passthrough. No Android 11, HALs escritos em AIDL também são compatíveis. Todos os AIDL HALs são aglutinados.

  • HALs encadernados . HALs expressos em linguagem de definição de interface HAL (HIDL) ou linguagem de definição de interface Android (AIDL). Esses HALs substituem os HALs convencionais e legados usados ​​em versões anteriores do Android. Em um HAL Binderizado, a estrutura do Android e os HALs se comunicam entre si usando chamadas de comunicação entre processos (IPC) do binder. Todos os dispositivos lançados com Android 8.0 ou posterior devem oferecer suporte apenas a HALs vinculados.

  • HALs de passagem . HALs convencionais ou legados encapsulados em HIDL Esses HALs encapsulam HALs existentes e podem servir o HAL nos modos binderizado e de mesmo processo (passagem). Os dispositivos atualizados para o Android 8.0 podem usar HALs de passagem.

Requisitos do modo HAL

Dispositivo Atravessar Encadernado
Lançar com Android 8.0 HALs listados em HALs de passagem devem ser de passagem. Todos os outros HALs são vinculados (incluindo HALs que são extensões de fornecedores).
Atualize para o Android 8.0 HALs listados em HALs de passagem devem ser de passagem. HALs listados em HALs Binderizados devem ser Binderizados.
Todos os outros HALs fornecidos pela imagem do fornecedor podem estar no modo passthrough OU binderizado. Em um dispositivo totalmente compatível com Treble, todos eles devem ser encadernados.

HALs encadernados

O Android exige que os seguintes HALs sejam vinculados em todos os dispositivos Android, independentemente de serem dispositivos de inicialização ou de atualização:

  • android.hardware.biometrics.fingerprint@2.1 . Substitui fingerprintd que não estão mais no Android 8.0.
  • android.hardware.configstore@1.0 . Novidade no Android 8.0.
  • android.hardware.dumpstate@1.0 . A interface original fornecida por este HAL não pôde ser corrigida e foi alterada. Por causa disso, dumpstate_board deve ser reimplementado em um determinado dispositivo (este é um HAL opcional).
  • android.hardware.graphics.allocator@2.0 . Necessário para ser vinculado no Android 8.0 para que os descritores de arquivos não precisem ser compartilhados entre processos confiáveis ​​e não confiáveis.
  • android.hardware.radio@1.0 . Substitui a interface fornecida pelo rild que vive em seu próprio processo.
  • android.hardware.usb@1.0 . Novidade no Android 8.0.
  • android.hardware.wifi@1.0 . Novidade no Android 8.0, substitui a biblioteca Wi-Fi HAL herdada que foi carregada em system_server
  • android.hardware.wifi.supplicant@1.0 . Uma interface HIDL sobre o processo wpa_supplicant existente.

HALs de passagem

O Android exige que os seguintes HALs estejam no modo de passagem em todos os dispositivos Android, independentemente de serem dispositivos de inicialização ou de atualização:

  • android.hardware.graphics.mapper@1.0 . Mapeia a memória no processo em que ela vive.
  • android.hardware.renderscript@1.0 . Passa itens no mesmo processo (equivalente ao openGL ).

Todos os HALs não listados acima devem ser vinculados para dispositivos de lançamento.

HALs do mesmo processo

HALs do mesmo processo (SP-HALs) sempre abrem no mesmo processo em que são usados. Eles incluem todos os HALs não expressos em HIDL, bem como alguns que não são aglutinados. A adesão ao conjunto SP-HAL é controlada apenas pelo Google, sem exceções.

SP-HALs incluem o seguinte:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (fornecido pelo sistema Android, sempre passthrough)
  • android.hardware.graphics.mapper@1.0
  • android.hardware.renderscript@1.0