Tipos HAL

En Android 8.0 y versiones posteriores, las capas de nivel inferior se reescriben para adoptar una nueva arquitectura más modular. Los dispositivos que ejecutan Android 8.0 y superior deben admitir HAL escritos en HIDL, con algunas excepciones que se enumeran a continuación. Estos HAL se pueden enlazar o transferir. En Android 11, también se admiten las HAL escritas en AIDL. Todos los HAL de AIDL están encuadernados.

  • HAL encuadernados. HAL expresados ​​en lenguaje de definición de interfaz HAL (HIDL) o lenguaje de definición de interfaz Android (AIDL). Estas HAL reemplazan tanto las HAL convencionales como las heredadas que se usaban en versiones anteriores de Android. En una HAL enlazada, el marco de trabajo de Android y las HAL se comunican entre sí mediante llamadas de comunicación entre procesos (IPC) del enlazador. Todos los dispositivos que se inicien con Android 8.0 o posterior deben admitir solo HAL encuadernados.
  • HAL de transferencia. Una HAL heredada o convencional envuelta en HIDL. Estas HAL envuelven las HAL existentes y pueden servir a la HAL en modos enlazados y del mismo proceso (transferencia). Los dispositivos que se actualizan a Android 8.0 pueden usar HAL de transferencia.

Requisitos del modo HAL

Dispositivo Pasar por encuadernado
Lanzamiento con Android 8.0 Las HAL enumeradas en Passthrough HAL deben ser passthrough. Todas las demás HAL están enlazadas (incluidas las HAL que son extensiones de proveedores).
Actualizar a Android 8.0 Las HAL enumeradas en Passthrough HAL deben ser passthrough. Los HAL enumerados en HAL encuadernados deben estar encuadernados.
Todas las demás HAL proporcionadas por la imagen del proveedor pueden estar en modo passthrough O binderized. En un dispositivo totalmente compatible con Treble, todos estos deben estar encuadernados.

HAL encuadernados

Android requiere que las siguientes HALS se vinculen en todos los dispositivos Android, independientemente de si son dispositivos de lanzamiento o dispositivos de actualización:

  • android.hardware.biometrics.fingerprint@2.1 . Reemplaza la fingerprintd que ya no está en Android 8.0.
  • android.hardware.configstore@1.0 . Nuevo en Android 8.0.
  • android.hardware.dumpstate@1.0 . La interfaz original proporcionada por este HAL no se pudo corregir y se cambió. Debido a esto, dumpstate_board debe volver a implementarse en un dispositivo determinado (esta es una HAL opcional).
  • android.hardware.graphics.allocator@2.0 . Se requiere vincular en Android 8.0 para que los descriptores de archivos no tengan que compartirse entre procesos confiables y no confiables.
  • android.hardware.radio@1.0 . Reemplaza la interfaz provista por rild que vive en su propio proceso.
  • android.hardware.usb@1.0 . Nuevo en Android 8.0.
  • android.hardware.wifi@1.0 . Nuevo en Android 8.0, reemplaza la biblioteca HAL Wi-Fi heredada que se cargó en system_server .
  • android.hardware.wifi.supplicant@1.0 . Una interfaz HIDL sobre el proceso wpa_supplicant existente.

NOTA : Android proporciona las siguientes interfaces HIDL que siempre estarán en modo enlazado: android.frameworks.* , android.system.* y android.hidl.* (excepto android.hidl.memory@1.0 como se describe a continuación).

HAL de transferencia

Android requiere que las siguientes HAL estén en modo de transferencia en todos los dispositivos Android, independientemente de si son dispositivos de lanzamiento o dispositivos de actualización:

  • android.hardware.graphics.mapper@1.0 . Mapea la memoria en el proceso en el que vive.
  • android.hardware.renderscript@1.0 . Pasa elementos en el mismo proceso (equivalente a openGL ).

Todos los HAL que no se enumeran anteriormente deben estar encuadernados para los dispositivos de lanzamiento.

HAL del mismo proceso

Las HAL del mismo proceso (SP-HAL) siempre se abren en el mismo proceso en el que se utilizan. Incluyen todos los HAL no expresados ​​en HIDL, así como algunos que no están enlazados. La membresía en el conjunto SP-HAL está controlada únicamente por Google, sin excepciones.

Los SP-HAL incluyen lo siguiente:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (proporcionado por el sistema Android, siempre de paso)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

HAL convencionales y heredadas

Las HAL convencionales (en desuso en Android 8.0) son interfaces que se ajustan a una interfaz binaria de aplicación (ABI) específica con nombre y versión. La mayor parte de las interfaces del sistema Android ( cámara , audio , sensores , etc.) tienen la forma de HAL convencionales, que se definen en hardware/libhardware/include/hardware .

Las HAL heredadas (también en desuso en Android 8.0) son interfaces anteriores a las HAL convencionales. Algunos subsistemas importantes (Wi-Fi, capa de interfaz de radio y Bluetooth) son HAL heredados. Si bien no existe una forma uniforme o estandarizada de describir una HAL heredada, cualquier cosa anterior a Android 8.0 que no sea una HAL convencional es una HAL heredada. Partes de algunas HAL heredadas están contenidas en libhardware_legacy , mientras que otras partes están intercaladas en el código base.