Типы 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. Традиционный или устаревший HAL с оболочкой HIDL. Эти HAL обертывают существующие HAL и могут обслуживать HAL в режиме связывания и в режиме одного процесса (сквозной передачи). Устройства, обновляющиеся до Android 8.0, могут использовать сквозные HAL.

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

Устройство Пройти через Биндеризованный
Запуск с Android 8.0 HAL, перечисленные в Passthrough HAL, должны быть сквозными . Все остальные HAL подвергаются биндеризации (включая HAL, являющиеся расширениями поставщика).
Обновление до Android 8.0 HAL, перечисленные в Passthrough HAL, должны быть сквозными . HAL, перечисленные в биндеризованных HAL, должны быть биндеризованы.
Все остальные 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, которые всегда будут в биндеризованном режиме: 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) всегда открываются в том же процессе, в котором они используются. Они включают все HAL, не экспрессируемые в HIDL, а также некоторые, не подвергнутые биндеризации. Членство в наборе SP-HAL контролируется только Google без исключений.

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

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (предоставляется системой Android, всегда сквозной)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

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

Обычные HAL (не рекомендуемые в Android 8.0) - это интерфейсы, которые соответствуют определенному бинарному интерфейсу приложения с именами и версиями (ABI). Основная часть системных интерфейсов Android ( камера , звук , датчики и т. Д.) Представлена ​​в виде обычных HAL, которые определены в разделе hardware / libhardware / include / hardware .

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