Типы HAL

В Android 8.0 и выше уровни нижнего уровня переписаны, чтобы принять новую, более модульную архитектуру. Устройства под управлением Android 8.0 и выше должны поддерживать HAL, написанные на HIDL, за некоторыми исключениями, перечисленными ниже. Эти HAL могут быть подвергнуты связыванию или сквозной передаче. В Android 11 также поддерживаются HAL, написанные на AIDL. Все HAL AIDL подвергнуты биндеризации.

  • Биндеризованные HAL. HAL выражаются на языке определения интерфейса HAL (HIDL) или языке определения интерфейса Android (AIDL). Эти HAL заменяют как обычные, так и устаревшие HAL, используемые в более ранних версиях Android. В Binderized HAL структура Android и HAL взаимодействуют друг с другом с помощью вызовов межпроцессного взаимодействия связывателей (IPC). Все устройства, запускаемые с Android 8.0 или более поздней версии, должны поддерживать только объединенные HAL.
  • Сквозные HAL. HIDL обернутый обычный или устаревший HAL . Эти HAL охватывают существующие HAL и могут обслуживать HAL в режимах с объединением и в режиме одного процесса (сквозной передачи). Устройства, обновляющиеся до Android 8.0, могут использовать сквозные HAL.

Требования к режиму HAL

Устройство Пройти через Биндеризованный
Запуск с Android 8.0 , HAL , перечисленный в PASSTHROUGH ГАЛСА должен быть сквозным. Все остальные HAL подвергаются биндеризации (включая HAL, являющиеся расширениями поставщика).
Обновление до Android 8.0 , HAL , перечисленный в PASSTHROUGH ГАЛСА должен быть сквозным. , HAL , перечисленные в Binderized ГАЛС должны быть binderized.
Все остальные HAL, предоставленные образом поставщика, могут быть в сквозном ИЛИ в биндеризованном режиме. В устройстве, полностью совместимом с высокими частотами, все они должны быть связаны.

Биндеризованные HAL

Android требует, чтобы следующие HALS были привязаны на всех устройствах Android, независимо от того, являются ли они устройствами запуска или устройствами обновления:

  • android.hardware.biometrics.fingerprint@2.1 . Заменяет fingerprintd , которые уже не в Android 8.0.
  • android.hardware.configstore@1.0 . Новое в Android 8.0.
  • android.hardware.dumpstate@1.0 . Исходный интерфейс, предоставляемый этим HAL, не мог быть изменен с помощью шайб. Из - за этого, dumpstate_board должны быть повторно реализованы на данном устройстве (это является дополнительным HAL).
  • android.hardware.graphics.allocator@2.0 . Требуется преобразование в двоичный код в Android 8.0, поэтому файловые дескрипторы не должны использоваться совместно доверенными и ненадежными процессами.
  • android.hardware.radio@1.0 . Заменяет интерфейс , предоставляемый rild , который живет в своем собственном процессе.
  • android.hardware.usb@1.0 . Новое в Android 8.0.
  • android.hardware.wifi@1.0 . Новое в Android 8.0, заменяет устаревшую Wi-Fi HAL библиотека , которая была загружена в system_server .
  • android.hardware.wifi.supplicant@1.0 . Интерфейс HIDL поверх существующего wpa_supplicant процесса.

Примечание: Android предоставляет следующие HIDL интерфейсы , которые всегда будут в binderized режиме: android.frameworks.* , android.system.* , И android.hidl.* (За исключением android.hidl.memory@1.0 , как описано ниже).

Сквозные HAL

Android требует, чтобы следующие HAL находились в режиме сквозной передачи на всех устройствах Android, независимо от того, являются ли они запускающими устройствами или устройствами обновления:

  • android.hardware.graphics.mapper@1.0 . Сопоставляет память с процессом, в котором она живет.
  • android.hardware.renderscript@1.0 . Передает элементы в том же процессе (эквивалент openGL ).

Все HAL, не перечисленные выше, должны быть привязаны к устройствам запуска.

Однопроцессные HAL

Однопроцессные HAL (SP-HAL) всегда открываются в том же процессе, в котором они используются. Они включают в себя все ГАЛС не выраженные в HIDL, а также некоторые, которые не binderized. Членство в наборе SP-HAL контролируется только Google без исключений.

SP-HAL включают следующее:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (обеспечивается Android системы, всегда Passthrough)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

Обычные и устаревшие HAL

Обычные HAL (не рекомендуемые в Android 8.0) - это интерфейсы, которые соответствуют определенному бинарному интерфейсу приложения с именами и версиями (ABI). Масса Android - интерфейсов системы ( камер , аудио , датчики и т.д.) в форме обычного HALS, которые определены в соответствии с аппаратными средствами / libhardware / включить / аппаратное обеспечение .

Устаревшие HAL (также не рекомендуемые в Android 8.0) - это интерфейсы, предшествующие обычным HAL. Несколько важных подсистем (Wi-Fi, уровень радиоинтерфейса и Bluetooth) являются устаревшими HAL. Хотя не существует единого или стандартизованного способа описания устаревшего HAL, все, что предшествует Android 8.0 и не является обычным HAL, является устаревшим HAL. Части некоторого унаследованного ГАЛСА содержится в libhardware_legacy , в то время как другие части перемежаются по всей кодовой.