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) 안정성을 고려할 때 다음 아키텍처에 유의합니다.
odm
및vendor
파티션 간에는 ABI 안정성이 없습니다. 두 파티션을 동시에 업그레이드해야 합니다.odm
및vendor
파티션은 서로 의존할 수 있지만,vendor
파티션은 반드시odm
파티션 없이도 작동해야 합니다.odm
과system
간 ABI는vendor
와system
간 ABI와 동일합니다.
product
파티션과 vendor
또는 odm
파티션 간의 직접 상호작용은 허용되지 않습니다. 이 정책은 SEpolicy에 의해 적용됩니다.
ODM 파티션 구현
새 파티션을 구현하기 전에 관련 AOSP 변경을 검토하세요.
ODM 파티션 설정
odm
파티션을 설정하려면 다음 빌드 플래그를 포함합니다.
- 고정 파티션 크기의 경우:
BOARD_ODMIMAGE_PARTITION_SIZE
- 동적 파티션 크기의 경우:
PRODUCT_USE_DYNAMIC_PARTITIONS
및BOARD_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
참조를 일련의 하드웨어 지향 파티션(현재 odm
및 vendor
)으로 대체합니다. 플랫폼의 주요 vendor
참조 위치에는 동적 링커, 패키지 관리자, shell/libc
가 포함됩니다.