디렉터리, 규칙 및 sepolicy

이 페이지에서는 Android 8.0 이상을 지원하는 기기의 디렉터리 레이아웃, VNDK 규칙 및 관련 sepolicy를 설명합니다.

디렉터리 레이아웃

퇴행된 디렉터리 레이아웃은 다음과 같은 디렉터리로 구성됩니다.

  • /system/lib[64]에는 LL-NDK, VNDK 및 프레임워크 전용 라이브러리(LL-NDK-Private 및 VNDK-SP의 라이브러리와 이름이 같은 일부 라이브러리 포함)를 비롯한 모든 프레임워크 공유 라이브러리가 포함됩니다.
  • /system/lib[64]/vndk-sp에는 동일 프로세스 HAL의 VNDK-SP 라이브러리가 포함됩니다.
  • /vendor/lib[64]에는 공급업체에서 확장한 VNDK 라이브러리(DXUA 또는 DXUX VNDK 라이브러리), 동일 프로세스 HAL 구현 및 기타 공급업체 공유 라이브러리가 포함됩니다.
  • /vendor/lib[64]/vndk-sp에는 공급업체에서 확장한 VNDK-SP 라이브러리가 포함될 수 있습니다.

공급업체 모듈은 /system/lib[64]에서 VNDK 라이브러리를 로드합니다.

VNDK 규칙

이 섹션에는 VNDK 규칙이 포괄적으로 나열되어 있습니다.

  • 프레임워크 프로세스는 공급업체 파티션에서 비 SP-HAL 공유 라이브러리를 로드하면 안 됩니다(Android 8.1부터 엄격하게 적용됨).
  • 공급업체 프로세스는 시스템 파티션에서 비 LL-NDK, 비 VNDK-SP 및 비 VNDK 라이브러리를 로드하면 안 됩니다(Android O에서는 엄격하게 적용되지 않지만 향후 버전에서는 엄격하게 적용될 예정).
  • 설치된 VNDK 라이브러리는 Google에서 정의한 사용 가능한 VNDK 라이브러리의 하위 집합이어야 합니다.
  • SP-HAL 및 SP-HAL-Dep의 외부 종속 항목은 LL-NDK 또는 Google에서 정의한 VNDK-SP 라이브러리로 제한되어야 합니다.
    • SP-HAL 공유 라이브러리의 종속 항목은 LL-NDK 라이브러리, Google에서 정의한 VNDK-SP 라이브러리, 기타 SP-HAL 라이브러리 또는 SP-HAL-Dep 라이브러리로 라벨이 지정될 수 있는 다른 공급업체 공유 라이브러리로 제한되어야 합니다.
    • 공급업체 공유 라이브러리는 AOSP 라이브러리가 아니고 종속 항목이 LL-NDK 라이브러리, Google에서 정의한 VNDK-SP 라이브러리, SP-HAL 라이브러리 또는 기타 SP-HAL-Dep 라이브러리로 제한되는 경우에만 SP-HAL-Dep 라이브러리로 라벨이 지정될 수 있습니다.
  • VNDK-SP는 독립적이어야 합니다. libRS_internal.so는 Android 8.0에서 특별하게 취급되지만 향후 버전에서는 재검토될 예정입니다.
  • 프레임워크-공급업체 통신이 비 HIDL 인터페이스를 통해 이루어지지 않습니다. 여기에는 바인더, 소켓, 공유 메모리, 파일 등이 포함되며 이에 국한되지 않습니다.
  • 시스템 파티션의 크기는 모든 사용 가능한 VNDK 라이브러리의 사본 두 개와 사용할 수 없는 프레임워크 공유 라이브러리의 사본 하나를 포함할 수 있을 정도로 커야 합니다.

sepolicy

이 섹션에서 설명한 프레임워크 프로세스는 sepolicy의 coredomain에 상응하는 반면 공급업체 프로세스는 non-coredomain에 상응합니다. 예를 들어 /dev/bindercoredomain에서만 액세스할 수 있고 /dev/vndbinder는 비 coredomain에서만 액세스할 수 있습니다.

유사한 정책이 시스템 및 공급업체 파티션의 공유 라이브러리에 액세스를 제한합니다. 다음 표는 여러 카테고리의 공유 라이브러리 액세스 권한을 보여줍니다.

카테고리 파티션 coredomain에서
액세스 가능
비 coredomain에서
액세스 가능
LL-NDK 시스템
LL-NDK-Private 시스템
VNDK-SP/VNDK-SP-Private 시스템
VNDK-SP-Ext 공급업체
VNDK 시스템
VNDK-Ext 공급업체 아니요
FWK-ONLY 시스템 아니요
FWK-ONLY-RS 시스템 아니요
SP-HAL 공급업체
SP-HAL-Dep 공급업체
VND-ONLY 공급업체 아니요

LL-NDK-Private 및 VNDK-SP-Private은 두 도메인에서 모두 액세스 가능해야 합니다. 비 coredomain에서 간접적으로 액세스하기 때문입니다. 마찬가지로 SP-HAL-Dep는 SP-HAL이 의존하므로 coredomain에서 액세스 가능해야 합니다.

same_process_hal_file 라벨

다음 라이브러리는 공급업체 파티션에 존재합니다. 이러한 라이브러리를 coredomain 및 비 coredomain에서 모두 액세스 가능하게 합니다.

  • /vendor/lib[64]/vndk-sp의 VNDK-SP-Ext
  • /vendor/lib[64] 또는 /vendor/lib[64]/hw의 SP-HAL
  • /vendor/lib[64] 또는 /vendor/lib[64]/hw의 SP-HAL-Dep

명시적으로 이러한 파일의 라벨을 same_process_hal_file로 지정합니다. vendor 파티션의 모든 항목이 기본적으로 coredomain에 액세스할 수 없기 때문입니다. 다음과 유사한 행을 공급업체 관련 file_contexts 파일에 추가하세요.

/vendor/lib(64)?/hw/libMySpHal\.so        u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/vndk-sp/libBase\.so      u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/libBaseInternal\.so      u:object_r:same_process_hal_file:s0