Typy HAL

W systemie Android 8.0 i nowszym warstwy niższego poziomu są przepisywane w celu przyjęcia nowej, bardziej modułowej architektury. Urządzenia z systemem Android 8.0 lub nowszym muszą obsługiwać warstwy HAL napisane w HIDL, z kilkoma wyjątkami wymienionymi poniżej. Te warstwy HAL mogą być binderyzowane lub przekazywane. W systemie Android 11 obsługiwane są również warstwy HAL napisane w AIDL. Wszystkie warstwy HAL AIDL są zbindowane.

  • Zbindowane warstwy HAL. Warstwy 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 systemu Android. W Binderized HAL, platforma Android i warstwy HAL komunikują się ze sobą za pomocą wywołań komunikacji między procesami (IPC) bindera. Wszystkie urządzenia uruchamiane z systemem Android 8.0 lub nowszym muszą obsługiwać tylko zbinderyzowane warstwy HAL.
  • Przekazujące warstwy HAL. HIDL owinięte konwencjonalnego lub starszych HAL . Te warstwy HAL otaczają istniejące warstwy HAL i mogą obsługiwać warstwy HAL w trybach zbindowanych i tego samego procesu (przekazującego). Urządzenia aktualizowane do systemu Android 8.0 mogą korzystać z przekazujących warstw HAL.

Wymagania dotyczące trybu HAL

Urządzenie Przejść przez Spoiwo
Uruchom z Androidem 8.0 HAL wymienione w PASSTHROUGH HAL musi być passthrough. Wszystkie pozostałe warstwy HAL są powiązane (w tym warstwy HAL, które są rozszerzeniami dostawcy).
Uaktualnij do Androida 8.0 HAL wymienione w PASSTHROUGH HAL musi być passthrough. HAL wymienione w Binderized HAL należy binderized.
Wszystkie inne warstwy HAL dostarczone przez obraz dostawcy mogą być w trybie tranzytowym LUB powiązanym. W urządzeniu w pełni zgodnym z wysokimi tonami wszystkie te elementy muszą być zbindowane.

Sklejone warstwy 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óry nie jest już w Androidzie 8.0.
  • android.hardware.configstore@1.0 . Nowość w Androidzie 8.0.
  • android.hardware.dumpstate@1.0 . Oryginalnego interfejsu dostarczonego przez tę warstwę HAL nie można było podstawić i został on zmieniony. Z tego powodu, dumpstate_board musi być ponownie wprowadzony do danego urządzenia (to jest opcjonalnie Hal).
  • android.hardware.graphics.allocator@2.0 . Wymagane do bindowania w systemie Android 8,0, aby deskryptory plików nie musiały być współużytkowane przez zaufane i niezaufane procesy.
  • android.hardware.radio@1.0 . Zastępuje interfejs dostarczony przez rild który mieszka we własnym procesie.
  • android.hardware.usb@1.0 . Nowość w Androidzie 8.0.
  • android.hardware.wifi@1.0 . Nowego w Androidzie 8.0, zastępuje starszego bezprzewodowy HAL biblioteki, który został załadowany do system_server .
  • android.hardware.wifi.supplicant@1.0 . Interfejs HIDL nad istniejącym wpa_supplicant procesu.

UWAGA: Android udostępnia następujące interfejsy HIDL który zawsze będzie w trybie binderized: android.frameworks.* , android.system.* , A android.hidl.* (Z wyjątkiem android.hidl.memory@1.0 jak opisano poniżej).

Przechodzące warstwy HAL

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

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

Wszystkie warstwy HAL niewymienione powyżej muszą być zbindowane dla urządzeń uruchamiających.

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 warstwy HAL nie wyrażonych w HIDL jak również takie, które nie są binderized. Członkostwo w zestawie SP-HAL jest kontrolowane wyłącznie przez Google, bez wyjątków.

SP-HAL obejmują następujące elementy:

  • openGL
  • Vulkan
  • android.hidl.memory@1.0 (dostarczone przez system Android zawsze przejściówki)
  • 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, które są zgodne z określonym interfejsem binarnym aplikacji (ABI) o nazwie i wersji. Większość interfejsów systemowych Android ( aparat , dźwięku , czujników , itd.) Są w postaci konwencjonalnych HALS, które są określone na podstawie sprzętu / libhardware / włączenia / sprzęt .

Starsze warstwy HAL (również przestarzałe w systemie Android 8.0) to interfejsy, które poprzedzają 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, co starsze niż Android 8.0, a nie jest konwencjonalną warstwą HAL, jest starszą warstwą HAL. Fragmenty niektórych starszych HAL są zawarte w libhardware_legacy , podczas gdy inne części są przeplatane całym kodzie.