Обзор уровня абстракции оборудования

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

Связанные HAL

Android требует, чтобы следующие HAL были привязаны на всех устройствах 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