Skip to content

Параграф 5: Динамічно доступні HAL

INFO

HAL (скорочення від Hardware Abstraction Layer) - програмний прошарок, що реалізує для системи абстрактний узагальнений інтерфейс, який дає змогу їй спілкуватися з драйвером пристрою, не заглиблюючись в особливості його реалізації.

Також називається шаром апаратних абстракцій і іноді, помилково, драйвером.

Звичайні, реалізовані у вигляді HIDL-сервісів абстракції Android запускає під час завантаження системи, реєструє їх і спілкується з ними через Binder IPC (hwbinder). *Такі HAL залишаються запущеними протягом усього часу роботи системи, навіть коли необхідності в них немає.

Динамічно доступні HAL реєструються в hwservicemanager як lazy ("ледачі") сервіси і запускаються системою, тільки коли в них з'являються клієнти - додатки або служби, що використовують апаратний компонент, який реалізується таким HAL.

Приміром, WiFi і Bluetooth HAL можуть завантажуватися, коли користувач вмикає відповідну функцію в меню телефона, а під час вимкнення вони вивантажуватимуться, звільняючи ресурси системи. Camera HAL може завантажуватися, коли користувач відкриває застосунок Камера і завершувати свою роботу після його закриття.

Така можливість особливо вигідна для Android Go, де ресурси максимально обмежені.

Нижче наведено основний перелік HAL, які можна легко перетворити на динамічні.

Відповідні не-lazy записи мають бути замінені в device.mk:

makefile
PRODUCT_PACKAGES += \
    android.hardware.wifi@1.0-service-lazy \
    android.hardware.cas@1.2-service-lazy \
    android.hardware.drm@1.0-service-lazy \
    android.hardware.drm@1.3-service-lazy.clearkey

ВАЖЛИВО:

Версію HAL (після символу @) наведено для прикладу, її слід залишити незмінною.

Камера

Щоб перетворити цей HAL на динамічний, потрібні такі зміни в device.mk:

makefile
PRODUCT_PACKAGES += android.hardware.camera.provider@2.4-service-lazy
PRODUCT_PROPERTY_OVERRIDES += ro.camera.enableLazyHal=true

Застарілі HAL (Camera HAL1) у динамічному режимі можуть працювати некоректно в режимі ліхтарика (плитка в швидких налаштуваннях).

Інші компоненти

  1. У прошивках деяких Android Go пристроїв (наприклад, Nokia 1 Plus) можна знайти динамічний Widevine DRM HAL (android.hardware.drm@1.3-service-lazy.widevine).

  2. Для Qualcomm-пристроїв з бездротовим модулем prima (msm8916/8917/8937, Snapdragon 410, 420, 425, 435, 439, QM215) є блоки Qti Bluetooth HAL (android.hardware.bluetooth@1.0-service-qti-lazy), які можна знайти в прошивках для Nokia 1.3.

Під час додавання цього компонента потрібно додати в device.mk таке:

makefile
PRODUCT_PROPERTY_OVERRIDES += ro.vendor.bluetooth.lazyhal=true