HAL 유형

Android 8.0 이상에서는 좀 더 모듈식에 가까운 새 아키텍처를 채택하도록 하위 수준 레이어가 재작성됩니다. Android 8.0 이상을 실행하는 기기는 HIDL로 작성된 HAL을 지원해야 하지만 아래와 같은 몇 가지 예외가 있습니다. 이러한 HAL은 패스 스루이거나 바인더화될 수 있습니다. Android 11에서는 AIDL로 작성된 HAL도 지원됩니다. 모든 AIDL HAL은 바인더화됩니다.

  • 바인더화된 HAL. HAL은 HAL 인터페이스 정의 언어(HIDL) 또는 Android 인터페이스 정의 언어(AIDL)로 표현됩니다. 이러한 HAL은 이전 버전의 Android에서 사용되는 기존 및 레거시 HAL을 모두 대체합니다. 바인더화된 HAL에서 Android 프레임워크와 HAL은 바인더 프로세스 간 통신(IPC) 호출을 사용하여 상호 간에 통신합니다. Android 8.0 이상으로 출시되는 모든 기기는 바인더화된 HAL만 지원해야 합니다.
  • 패스 스루 HAL. HIDL로 래핑된 기존 또는 레거시 HAL. 이러한 HAL은 기존 HAL을 래핑하며, 바인더화된 모드와 동일 프로세스(패스 스루) 모드에서 HAL을 처리할 수 있습니다. Android 8.0으로 업그레이드하는 기기에서는 패스 스루 HAL을 사용할 수 있습니다.

HAL 모드 요구사항

기기 패스 스루 바인더화
Android 8.0으로 출시 패스 스루 HAL에 나열된 HAL은 패스 스루여야 합니다. 다른 모든 HAL은 바인더화됩니다(공급업체 확장 프로그램인 HAL 포함).
Android 8.0으로 업그레이드 패스 스루 HAL에 나열된 HAL은 패스 스루여야 합니다. 바인더화된 HAL에 나열된 HAL은 바인더화되어야 합니다.
공급업체 이미지에 의해 제공되는 다른 모든 HAL은 패스 스루 또는 바인더화 모드에 속할 수 있습니다. 온전히 Treble을 준수하는 기기에서는 전부 바인더화되어야 합니다.

바인더화된 HAL

Android에서는 출시 기기 또는 업그레이드 기기인지 여부와 상관없이 모든 Android 기기에서 다음과 같은 HAL이 바인더화되어야 합니다.

  • android.hardware.biometrics.fingerprint@2.1. Android 8.0에서 더 이상 볼 수 없는 fingerprintd를 대체합니다.
  • 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에 새로 도입되었으며, system_server에 로드되었던 기존 Wi-Fi HAL 라이브러리를 대체합니다.
  • android.hardware.wifi.supplicant@1.0. 기존 wpa_supplicant 프로세스를 통한 HIDL 인터페이스입니다.

참고: Android는 android.frameworks.*, android.system.*android.hidl.*(아래 설명처럼 android.hidl.memory@1.0은 예외) 등의 HIDL 인터페이스를 제공합니다. 이러한 인터페이스는 항상 바인더화 모드를 취합니다.

패스 스루 HAL

Android에서는 출시 기기 또는 업그레이드 기기인지 여부와 상관없이 다음과 같은 HAL이 모든 Android 기기에서 패스 스루 모드를 취하도록 요구합니다.

  • android.hardware.graphics.mapper@1.0. 메모리를 메모리가 상주하는 프로세스에 매핑합니다.
  • android.hardware.renderscript@1.0. 같은 프로세스의 항목을 전달합니다(openGL과 동일).

위에 나열되지 않은 모든 HAL은 출시 기기에 대해 바인더화되어야 합니다.

동일 프로세스 HAL

동일 프로세스 HAL(SP-HAL)은 항상 해당 HAL이 사용되는 동일한 프로세스에서 열립니다. 여기에는 HIDL에 표현되지 않은 모든 HAL과 바인더화되지 않은 일부가 포함됩니다. 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에서 지원 중단됨)은 특정 이름 및 버전이 지정된 Application Binary Interface(ABI)와 일치하는 인터페이스입니다. Android 시스템 인터페이스의 대부분(카메라, 오디오, 센서 등)은 기존 HAL의 형태를 취합니다. 관련 내용은 hardware/libhardware/include/hardware에 정의되어 있습니다.

레거시 HAL(마찬가지로 Android 8.0에서 지원 중단됨)은 기존 HAL 이전의 인터페이스입니다. 몇몇 중요한 하위 시스템(Wi-Fi, 라디오, 인터페이스 레이어 및 블루투스)이 레거시 HAL입니다. 레거시 HAL을 설명하기 위한 획일적이거나 표준화된 방법은 없지만 기존 HAL이 아닌 Android 8.0 이전의 모든 HAL을 레거시 HAL로 보면 됩니다. 몇몇 레거시 HAL의 일부는 libhardware_legacy에 포함된 반면 나머지는 코드베이스 전체에 산재되어 있습니다.