Android 8.0 이상에서 좀 더 모듈식에 가까운 새 아키텍처를 채택하도록 하위 수준 레이어가 재작성됩니다. Android 8.0이상을 실행하는 기기는 HIDL로 작성된 HAL을 지원해야 하지만 아래와 같은 몇 가지 예외가 있습니다.
이러한 HAL은 Passthrough or Binderized 될 수 있습니다. Android 11 (R)에서는 AIDL로 작성된 HAL도 지원됩니다.
모든 AIDL HAL은 Binderized 됩니다.
- Binderized HALs
- HAL은 HIDL or AIDL로 표현됩니다. 이러한 HAL은 기존 레거시 HAL을 대체 하기 위함입니다. Binderized HAL에서 Android 프레임워크와 HAL은 바인더 프로세스 간 통신 (IPC) 호출을 사용하여 상호 간에 통신합니다. Android 8.0이상으로 출시되는 모든 기기는 Binderized HAL만 지원해야 합니다.
- Passthrough HALs
- HIDL로 래핑된 기존 or 레거시 HAL. HAL은 기존 HAL을 래핑하며, 바인더화된 모드와 동일 프로세스(패스 스루)모드에서 HAL을 처리할 수 있습니다. Android 8.0이상으로 업그레이드하는 기기는 Passthrough HAL을 사용할 수 있습니다.
Device | Passthrough | Binderized |
Android 8.0 and over release | 패스스루HAL에 나열된 HAL은 패스스루여야합니다. |
다른 모든 HAL은 바인더화됩니다 (공급업체 확장 프로그램인 HAL 포함). |
Android 8.0 upgrade | 패스스루HAL에 나열된 HAL은 패스스루여야합니다. |
바인더화된HAL에 나열된 HAL은 바인더화되어야 합니다. |
공급업체 이미지에 의해 제공되는 다른 모든 HAL은 패스 스루 또는 바인더화 모드에 속할 수 있습니다. 온전히 Treble을 준수하는 기기에서는 전부 바인더화되어야 합니다. |
Binderized HALs
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 인터페이스를 제공합니다. 이러한 인터페이스는 항상 바인더화 모드를 취합니다.
Passthrough HALs
Android에서는 출시 기기 또는 업그레이드 기기인지 여부와 상관없이 다음과 같은 HAL이 모든 Android 기기에서 패스 스루 모드를 취하도록 요구합니다.
android.hardware.graphics.mapper@1.0. 메모리를 메모리가 상주하는 프로세스에 매핑합니다.
android.hardware.renderscript@1.0. 같은 프로세스의 항목을 전달합니다(openGL과 동일).
위에 나열되지 않은 모든 HAL은 출시 기기에 대해 바인더화되어야 합니다.
SP-HALs (Same Process HALs)
동일 프로세스 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
Base and Legacy HALs
기존 HAL (Android 8.0 이후 지원 중단 됨)은 특정 이름 및 버전이 지정된 어플리케이션 바이너리 인터페이스 (ABI)와 일치하는 인터페이스입니다.
안드로이드 시스템 인터페이스의 대부분 (카메라, 오디오, 센서 등)은 기존 HAL의 형태를 취합니다. 관련 내용은 hardware/libhardware/include/hardware에 정의되어 있습니다. 몇몇 레거시 할의 일부는 libhardware_legacy에 포함된 반면 나머지는 코드베이스 전체에 산재되어 있습니다.
'개발 이야기' 카테고리의 다른 글
[파이썬 완전정복] 제어문 - 반복문 [1] (0) | 2020.05.21 |
---|---|
ION memory allocator (0) | 2020.05.12 |
Origin HAL Interface (0) | 2020.05.12 |
[파이썬 완전정복] 제어문 - 조건문 (0) | 2020.05.10 |
[RTOS] QNX (0) | 2020.05.09 |