Visão geral da camada de abstração de hardware (HAL)

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

  • HALs Binderizados . 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 herdados usados ​​em versões anteriores do Android. Em um Binderized HAL, a estrutura do Android e os HALs se comunicam entre si usando chamadas IPC (comunicação entre processos) de fichário. Todos os dispositivos iniciados com Android 8.0 ou posterior devem ser compatíveis apenas com HALs vinculados.

  • HALs de passagem . HALs convencionais ou herdados encapsulados em HIDL Esses HALs encapsulam HALs existentes e podem servir o HAL nos modos de encadernação e de mesmo processo (passagem). Os dispositivos que atualizam para o Android 8.0 podem usar HALs de passagem.

Requisitos do modo HAL

Dispositivo Atravessar Aglutinante
Iniciar com o Android 8.0 HALs listados em Passthrough HALs devem ser passthrough. Todos os outros HALs são fichários (incluindo HALs que são extensões do fornecedor).
Atualize para o Android 8.0 HALs listados em Passthrough HALs devem ser passthrough. As HALs listadas em Binderized HALs devem ser vinculadas.
Todos os outros HALs fornecidos pela imagem do fornecedor podem estar no modo passthrough OU fichário. Em um dispositivo totalmente compatível com Treble, todos eles devem ser fichários.

HALs Binderized

O Android exige que o HALS a seguir seja vinculado em todos os dispositivos Android, independentemente de serem dispositivos de inicialização ou dispositivos de atualização:

  • android.hardware.biometrics.fingerprint@2.1 . Substitui fingerprintd que não está mais no Android 8.0.
  • android.hardware.configstore@1.0 . Novo 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 fichário no Android 8.0 para que os descritores de arquivo 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 . Novo no Android 8.0.
  • android.hardware.wifi@1.0 . Novo no Android 8.0, substitui a biblioteca Wi-Fi HAL herdada que foi carregada no 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 dispositivos 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 a openGL ).

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

HALs de mesmo processo

HALs de 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 aglutinantes. 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 passagem)
  • android.hardware.graphics.mapper@1.0
  • android.hardware.renderscript@1.0