Tipos de HAL

No Android 8.0 e superior, 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 ser compatíveis com HALs escritos em HIDL, com algumas exceções listadas abaixo. Esses HALs podem ser encadernados ou de passagem. No Android 11, também há suporte para HALs escritos em AIDL. Todos os AIDL HALs são aglutinantes.

  • HALs aglutinados. 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 uma HAL Binderizada, a estrutura do Android e as HALs se comunicam usando chamadas de comunicação entre processos (IPC) do binder. Todos os dispositivos iniciados com Android 8.0 ou posterior devem ser compatíveis apenas com HALs vinculados.
  • HALs de passagem. Um HAL convencional ou herdado embrulhado em HIDL. Esses HALs envolvem os HALs existentes e podem servir o HAL nos modos binderized e mesmo processo (passthrough). Os dispositivos atualizados para o Android 8.0 podem usar HALs de passagem.

Requisitos do modo HAL

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

HALs aglutinados

O Android exige que os seguintes HALS sejam vinculados 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 alterada 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 ser vinculado 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 em system_server .
  • android.hardware.wifi.supplicant@1.0 . Uma interface HIDL sobre o processo wpa_supplicant existente.

NOTA : O Android fornece as seguintes interfaces HIDL que sempre estarão no modo binderized: android.frameworks.* , android.system.* e android.hidl.* (exceto android.hidl.memory@1.0 conforme descrito abaixo).

HALs de passagem

O Android exige que as 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 encadernados para dispositivos de inicialização.

HALs de mesmo processo

As HALs de mesmo processo (SP-HALs) sempre são abertas no mesmo processo em que são usadas. Eles incluem todos os HALs não expressos em HIDL, bem como alguns que não são aglutinantes. A associaçã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

HALs convencionais e legados

HALs convencionais (obsoleto no Android 8.0) são interfaces que estão em conformidade com uma interface binária de aplicativo (ABI) específica nomeada e com versão. A maior parte das interfaces do sistema Android ( câmera , áudio , sensores , etc.) está na forma de HALs convencionais, que são definidas em hardware/libhardware/include/hardware .

Os HALs legados (também obsoletos no Android 8.0) são interfaces anteriores aos HALs convencionais. Alguns subsistemas importantes (Wi-Fi, Radio Interface Layer e Bluetooth) são HALs herdados. Embora não haja uma maneira uniforme ou padronizada de descrever um HAL herdado, qualquer coisa anterior ao Android 8.0 que não seja um HAL convencional é um HAL herdado. Partes de algumas HALs legadas estão contidas em libhardware_legacy , enquanto outras partes são intercaladas por toda a base de código.