Обзор уровня аппаратной абстракции (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 .

Сквозные 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