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/*

custom_images 사용 불가

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

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

파티션 간 ABI 유지

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

파티션 간 ABI 유지
그림 1. 파티션 간 ABI 유지
  • /odm/vendor 파티션 간에는 ABI 안정성이 없습니다. 두 파티션을 동시에 업그레이드해야 합니다.
  • /odm/vendor 파티션은 서로 의존할 수 있지만, /vendor 파티션은 반드시 파티션 없이도 작동해야 합니다.
  • /odm/system 간 ABI는 /vendor/system 간 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.prop의 경우: PRODUCT_ODM_PROPERTIES
    이를 PRODUCT_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 파티션을 변조하지 못하게 하려면 /vendor/system 파티션에 한 것처럼 해당 파티션에 Android 자체 검사 부팅(AVB)을 사용 설정합니다.

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

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

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