HAL(하드웨어 추상화 계층) 개요

Android 8.0 이상에서 더 낮은 수준의 레이어는 새롭고 더 모듈화된 아키텍처를 채택하도록 다시 작성됩니다. Android 8.0 이상을 실행하는 기기는 아래 나열된 몇 가지 예외를 제외하고 HIDL로 작성된 HAL을 지원해야 합니다. 이러한 HAL은 바인더화되거나 통과될 수 있습니다. Android 11에서는 AIDL로 작성된 HAL도 지원됩니다. 모든 AIDL HAL은 바인더화됩니다.

  • 결합된 HAL. HAL 인터페이스 정의 언어(HIDL) 또는 Android 인터페이스 정의 언어(AIDL)로 표현되는 HAL. 이러한 HAL은 이전 버전의 Android에서 사용된 기존 HAL과 레거시 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 포함).
안드로이드 8.0으로 업그레이드 패스스루 HAL 에 나열된 HAL은 패스스루여야 합니다. 바인더화된 HAL에 나열된 HAL 은 바인더화되어야 합니다.
공급업체 이미지에서 제공하는 다른 모든 HAL은 통과 또는 바인더화 모드일 수 있습니다. Treble과 완전히 호환되는 장치에서는 이들 모두를 바인더화해야 합니다.

결합된 HAL

Android는 다음 HALS가 시작 장치인지 또는 업그레이드 장치인지에 관계없이 모든 Android 장치에서 바인더화되도록 요구합니다.

  • android.hardware.biometrics.fingerprint@2.1 . 더 이상 Android 8.0에 없는 fingerprintd 을 대체합니다.
  • android.hardware.configstore@1.0 . Android 8.0의 새로운 기능.
  • android.hardware.dumpstate@1.0 . 이 HAL에서 제공하는 원래 인터페이스는 shim할 수 없으며 변경되었습니다. 이 때문에 지정된 장치에서 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.* HIDL 인터페이스를 제공합니다(아래에 설명된 android.hidl.memory@1.0 제외).

통과 HAL

Android에서는 시작 기기 또는 업그레이드 기기에 관계없이 모든 Android 기기에서 통과 모드에 있어야 하는 다음 HAL이 필요합니다.

  • android.hardware.graphics.mapper@1.0 . 메모리가 살고 있는 프로세스에 메모리를 매핑합니다.
  • android.hardware.renderscript@1.0 . 동일한 프로세스에서 항목을 전달합니다( openGL 과 동일).

위에 나열되지 않은 모든 HAL은 실행 장치에 대해 바인더화되어야 합니다.

동일 프로세스 HAL

동일 프로세스 HAL(SP-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에서 더 이상 사용되지 않음)은 이름이 지정되고 버전이 지정된 특정 ABI(애플리케이션 바이너리 인터페이스)를 준수하는 인터페이스입니다. 대부분의 Android 시스템 인터페이스( 카메라 , 오디오 , 센서 등)는 hardware/libhardware/include/hardware 아래에 정의된 기존 HAL 형식입니다.

기존 HAL(Android 8.0에서도 지원 중단됨)은 기존 HAL보다 앞선 인터페이스입니다. 몇 가지 중요한 하위 시스템(Wi-Fi, 무선 인터페이스 계층 및 Bluetooth)은 레거시 HAL입니다. 레거시 HAL을 설명하는 균일하거나 표준화된 방법은 없지만 기존 HAL이 아닌 Android 8.0 이전의 모든 것은 레거시 HAL입니다. 일부 레거시 HAL의 일부는 libhardware_legacy 에 포함되어 있는 반면 다른 부분은 코드베이스 전체에 산재되어 있습니다.