Przegląd warstwy abstrakcji sprzętu (HAL)

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W Androidzie 8.0 i nowszych warstwy niższego poziomu są przepisywane, aby przyjąć nową, bardziej modułową architekturę. Urządzenia z systemem Android 8.0 lub nowszym muszą obsługiwać warstwy HAL napisane w języku HIDL, z kilkoma wyjątkami wymienionymi poniżej. Te warstwy HAL można związać lub przepuścić. W systemie Android 11 obsługiwane są również warstwy HAL napisane w języku AIDL. Wszystkie AIDL HAL są zbindowane.

  • Binderyzowane HAL. Wartości HAL wyrażone w języku definicji interfejsu HAL (HIDL) lub języku definicji interfejsu systemu Android (AIDL). Te warstwy HAL zastępują zarówno konwencjonalne, jak i starsze warstwy HAL używane we wcześniejszych wersjach Androida. W warstwie HAL Binderized platforma Android i warstwy HAL komunikują się ze sobą za pomocą wywołań komunikacji między procesami (IPC) wiązania. Wszystkie urządzenia uruchamiane z systemem Android 8.0 lub nowszym muszą obsługiwać tylko powiązane warstwy HAL.
  • Przejściowe warstwy HAL. Konwencjonalny lub starszy HAL owinięty w HIDL . Te warstwy HAL otaczają istniejące warstwy HAL i mogą obsługiwać warstwy HAL w trybach binderized i tego samego procesu (przekazywanie). Urządzenia uaktualniające do systemu Android 8.0 mogą korzystać z przekazywanych warstw HAL.

Wymagania trybu HAL

Urządzenie Przejść przez spojony
Uruchom z Androidem 8.0 Warstwy HAL wymienione w przekazywaniu HAL muszą być przekazywane. Wszystkie inne warstwy HAL są powiązane (w tym warstwy HAL, które są rozszerzeniami dostawców).
Zaktualizuj do Androida 8.0 Warstwy HAL wymienione w przekazywaniu HAL muszą być przekazywane. HAL wymienione w Binderized HAL muszą być zbindowane.
Wszystkie inne warstwy HAL dostarczone przez obraz dostawcy mogą być w trybie tranzytowym LUB powiązanym. W urządzeniu w pełni zgodnym ze standardem Treble wszystkie z nich muszą być zbindowane.

Binderyzowane HAL

Android wymaga powiązania następujących HALS na wszystkich urządzeniach z Androidem, niezależnie od tego, czy są to urządzenia uruchamiające, czy uaktualniające:

  • android.hardware.biometrics.fingerprint@2.1 . Zastępuje fingerprintd , którego nie ma już w systemie Android 8.0.
  • android.hardware.configstore@1.0 . Nowość w Androidzie 8.0.
  • android.hardware.dumpstate@1.0 . Oryginalnego interfejsu zapewnianego przez tę warstwę HAL nie można było dopasować i został zmieniony. Z tego powodu dumpstate_board musi zostać ponownie zaimplementowany na danym urządzeniu (jest to opcjonalna warstwa HAL).
  • android.hardware.graphics.allocator@2.0 . Wymagane do powiązania w systemie Android 8.0, aby deskryptory plików nie musiały być udostępniane między procesami zaufanymi i niezaufanymi.
  • android.hardware.radio@1.0 . Zastępuje interfejs dostarczany przez rild , który żyje we własnym procesie.
  • android.hardware.usb@1.0 . Nowość w Androidzie 8.0.
  • android.hardware.wifi@1.0 . Nowość w systemie Android 8.0 zastępuje starszą bibliotekę Wi-Fi HAL, która została załadowana do system_server .
  • android.hardware.wifi.supplicant@1.0 . Interfejs HIDL nad istniejącym procesem wpa_supplicant .

UWAGA : Android udostępnia następujące interfejsy HIDL, które zawsze będą działać w trybie powiązanym: android.frameworks.* , android.system.* i android.hidl.* (z wyjątkiem android.hidl.memory@1.0 , jak opisano poniżej).

Przejściowe warstwy HAL

Android wymaga, aby następujące warstwy HAL były w trybie przekazywania na wszystkich urządzeniach z Androidem, niezależnie od tego, czy są to urządzenia uruchamiające, czy uaktualniające:

  • android.hardware.graphics.mapper@1.0 . Odwzorowuje pamięć na proces, w którym żyje.
  • android.hardware.renderscript@1.0 . Przekazuje elementy w tym samym procesie (odpowiednik openGL ).

Wszystkie warstwy HAL, które nie zostały wymienione powyżej, muszą być zbindowane dla urządzeń startowych.

HAL tego samego procesu

Warstwy HAL tego samego procesu (SP-HAL) zawsze otwierają się w tym samym procesie, w którym są używane. Obejmują one wszystkie HAL niewyrażane w HIDL, jak również niektóre, które nie są związane. Członkostwo w zestawie SP-HAL jest kontrolowane wyłącznie przez Google, bez żadnych wyjątków.

SP-HAL obejmują:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (dostarczany przez system Android, zawsze przekazywany)
  • android.hardware.graphics.mapper@1.0 .
  • android.hardware.renderscript@1.0

Konwencjonalne i starsze warstwy HAL

Konwencjonalne warstwy HAL (przestarzałe w systemie Android 8.0) to interfejsy zgodne z określonym nazwanym i wersjonowanym interfejsem binarnym aplikacji (ABI). Większość interfejsów systemu Android ( kamera , dźwięk , czujniki itp.) ma postać konwencjonalnych warstw HAL, które są zdefiniowane w hardware/libhardware/include/hardware .

Starsze warstwy HAL (również wycofane z systemu Android 8.0) to interfejsy starsze niż konwencjonalne warstwy HAL. Kilka ważnych podsystemów (Wi-Fi, warstwa interfejsu radiowego i Bluetooth) to starsze warstwy HAL. Chociaż nie ma jednolitego ani znormalizowanego sposobu opisania starszej warstwy HAL, wszystko starsze niż Android 8.0, które nie jest konwencjonalną warstwą HAL, jest starszą warstwą HAL. Części niektórych starszych warstw HAL są zawarte w libhardware_legacy , podczas gdy inne części są przeplatane w całej bazie kodu.