ODM 파티션

Android 10은 Android 빌드 시스템을 사용하여 odm 파티션 빌드를 지원합니다.

ODM 파티션 정보

원천 디자인 제조업체(ODM)는 단일 칩 시스템(SoC) 공급업체 보드 서포트 패키지(BSP)를 특정 기기(보드)에 맞게 맞춤설정합니다. 이를 통해 보드 관련 구성요소, 보드 관련 데몬 또는 하드웨어 추상화 계층(HAL)의 자체 기능을 위한 커널 모듈을 구현할 수 있습니다. SoC 구성요소를 교체하거나 맞춤설정할 수도 있습니다.

낮은 Android 버전에서는 이러한 맞춤설정으로 인해 SoC가 동일하거나 SoC는 다르지만 같은 제품군인 기기에 단일 공급업체 이미지를 사용하지 못했습니다. Android 10 이상에서는 맞춤설정에 별도의 odm 파티션을 사용할 수 있으므로 여러 하드웨어 SKU에 단일 공급업체 이미지를 사용할 수 있습니다.

제품 및 ODM 파티션 사용

Android 9에서는 product 파티션을 빌드하도록 지원을 추가하여 서로 다른 product.img 이미지에서 제공하는 여러 소프트웨어 SKU에 단일 시스템 이미지를 사용할 수 있습니다. product 파티션은 소프트웨어 SKU용이며 odm 파티션은 하드웨어 SKU용입니다.

전용 제품 및 ODM 파티션을 사용하면 여러 소프트웨어 SKU 간 공유를 위해 일반 코드를 호스팅하는 system 파티션과 특정 SoC를 기반으로 여러 기기 간 공유를 위해 SoC 관련 BSP 코드를 호스팅하는 vendor 파티션을 사용할 수 있습니다.

별도의 파티션을 사용하면 디스크 공간 관리의 어려움과 같은 단점이 있습니다. 예를 들어 향후 확장을 위한 제한된 공간을 확보해야 합니다. 그러나 Android 10에서는 동적 파티션을 지원하여 디스크 문제를 제거하고 무선 업데이트(OTA) 도중 기기의 파티션을 다시 나눌 수 있습니다.

ODM 구성요소

vendor 파티션과 마찬가지로 odm 파티션에는 다음 테이블에 나열된 ODM 관련 구성요소가 포함됩니다.

ODM 관련 구성요소 위치
로드 가능한 커널 모듈(LKM) /odm/lib/modules/*.ko
네이티브 라이브러리 /odm/lib[64]
HAL /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
VINTF 객체 데이터 /odm/etc/vintf
init.rc 파일 /odm/etc/init
시스템 속성 /odm/build.prop
런타임 리소스 오버레이(RRO) /odm/overlay/*.apk
/odm/app/*.apk
Priv-app /odm/priv-app/*.apk
자바 라이브러리 /odm/framework/*.jar
Android 프레임워크 시스템 구성 /odm/etc/sysconfig/*, /odm/etc/permissions/*

맞춤 이미지 없음

맞춤 이미지는 다음을 지원하지 않으므로 사용하지 않습니다.

  • 특정 타겟에 모듈 설치: 맞춤 이미지는 아티팩트를 이미지로 복사하는 것을 지원하지만, 타겟 파티션을 빌드 규칙의 일부로 지정하여 모듈을 특정 파티션에 설치할 수는 없습니다.
  • Soong: custom_images는 Soong 빌드 시스템을 사용하여 빌드할 수 없습니다.
  • OTA 업데이트: 맞춤 이미지는 무선 업데이트할 수 없는 공장 출고 시 ROM 이미지로 사용됩니다.

파티션 간 ABI 유지

odm 파티션은 vendor 파티션의 확장입니다. Application Binary Interface(ABI) 안정성을 고려할 때 다음 아키텍처에 유의합니다.

파티션 간 ABI 유지
그림 1. 파티션 간 ABI 유지
  • odmvendor 파티션 간에는 ABI 안정성이 없습니다. 두 파티션을 동시에 업그레이드해야 합니다.
  • odmvendor 파티션은 서로 의존할 수 있지만, vendor 파티션은 반드시 odm 파티션 없이도 작동해야 합니다.
  • odmsystem 간 ABI는 vendorsystem 간 ABI와 동일합니다.

product 파티션과 vendor 또는 odm 파티션 간의 직접 상호작용은 허용되지 않습니다. 이 정책은 SEpolicy에 의해 적용됩니다.

ODM 파티션 구현

새 파티션을 구현하기 전에 관련 AOSP 변경을 검토하세요.

ODM 파티션 설정

odm 파티션을 설정하려면 다음 빌드 플래그를 포함합니다.

  • 고정 파티션 크기의 경우: BOARD_ODMIMAGE_PARTITION_SIZE
  • 동적 파티션 크기의 경우: PRODUCT_USE_DYNAMIC_PARTITIONSBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
  • ODM 이미지에 사용하는 BOARD_ODMIMAGE_FILE_SYSTEM_TYPE 파일 시스템 유형
  • /odm/build.propPRODUCT_ODM_PROPERTIESPRODUCT_ODM_PROPERTIES += product.abc=ok에서와 같이 $(call inherit-product path/to/device.mk) 내에서 사용

ODM 파티션에 모듈 설치

다음 빌드 플래그를 사용하여 odm 파티션에 모듈을 설치합니다.

  • Android.bp에서 device_specific: true
  • Android.mk에서 LOCAL_ODM_MODULE := true

자체 검사 부팅 사용 설정

악성 소프트웨어가 odm 파티션을 변조하지 못하게 하려면 vendorsystem 파티션에 하는 것처럼 파티션에 Android 자체 검사 부팅(AVB)을 사용 설정합니다.

AVB를 사용 설정하려면 BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS 빌드 플래그를 포함합니다. 동적 파티션에 AVB를 구성하는 것에 관한 자세한 내용은 AVB 구성 변경을 참고하세요.

/odm을 다른 /vendor 파티션으로 처리

시스템이 odm 파티션을 vendor 파티션으로 처리하기 위해 하드 코딩 vendor 참조를 일련의 하드웨어 지향 파티션(현재 odmvendor)으로 대체합니다. 플랫폼의 주요 vendor 참조 위치에는 동적 링커, 패키지 관리자, shell/libc가 포함됩니다.