Типы 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, перечисленные в Binderized HAL , должны быть скреплены.
Все другие HAL, предоставляемые образом поставщика, могут быть в режиме сквозного ИЛИ связывания. В устройстве, полностью совместимом с Treble, все они должны быть перевязаны.

Связанные 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 , в то время как другие части разбросаны по кодовой базе.