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