개요

Android 기기에는 부팅 프로세스에서 다양한 기능을 제공하는 여러 파티션이 있습니다.

표준 파티션

  • boot 파티션. 이 파티션은 커널 이미지를 포함하고 mkbootimg를 사용하여 생성됩니다. 새 부팅 파티션을 플래시하지 않고 가상 파티션을 사용하여 두 이미지를 직접 플래시할 수 있습니다. 이 파티션에는 Android 13 이전에 출시된 기기의 일반 램디스크도 포함되어 있습니다.

    • 커널. 가상 kernel 파티션은 이전 커널 이미지 위에 새 커널 이미지를 작성하여 커널(zImage, zImage-dtb, Image.gz-dtb)을 덮어씁니다. 제공된 개발 커널이 호환되지 않는 경우 vendor, system, dtb 파티션(있는 경우)을 관련 커널 모듈로 업데이트해야 할 수도 있습니다.

    • 램디스크. 가상 ramdisk 파티션은 이전 램디스크 이미지 위에 새 램디스크 이미지를 작성하여 램디스크를 덮어씁니다.

    덮어쓰기 작업은 eMMC에서 기존 이미지의 시작 위치를 확인하고 이 위치에 새 이미지를 복사합니다. 새 이미지(커널 또는 램디스크)가 기존 이미지보다 클 수도 있습니다. 공간을 확보하기 위해 부트로더는 이미지를 따라 데이터를 이동하거나 오류가 있는 작업을 취소할 수 있습니다.

  • init_boot 파티션. 이 파티션에는 Android 13 이상을 실행하는 기기를 위한 일반 램디스크가 포함되어 있습니다.

  • system 파티션. 이 파티션에는 Android 프레임워크가 포함됩니다.

  • odm 파티션. 이 파티션에는 단일 칩 시스템(SoC) 공급업체 보드 서포트 패키지(BSP)의 ODM(Original Design Manufacturer) 맞춤설정이 포함됩니다. 이러한 맞춤설정을 통해 ODM은 SoC 구성요소를 교체하거나 맞춤설정하고, 하드웨어 추상화 계층(HAL)에 보드별 구성요소, 데몬, ODM 관련 기능을 위한 커널 모듈을 구현할 수 있습니다. 이 파티션은 선택사항이며 일반적으로 기기가 여러 하드웨어 SKU를 위해 단일 공급업체 이미지를 사용할 수 있도록 맞춤설정을 포함하는 데 사용됩니다. 자세한 내용은 ODM 파티션을 참고하세요.

  • odm_dlkm 파티션. 이 파티션은 ODM 커널 모듈을 저장하는 데 사용됩니다. ODM 커널 모듈을 odm 파티션이 아닌 odm_dlkm 파티션에 저장하면 odm 파티션을 업데이트하지 않고 ODM 커널 모듈을 업데이트할 수 있습니다.

  • recovery 파티션. 이 파티션은 OTA 프로세스 중에 부팅되는 복구 이미지를 저장합니다. 원활한 업데이트를 지원하는 기기는 복구 이미지를 별도의 이미지가 아닌 boot 또는 init_boot 이미지에 포함된 램디스크로 저장할 수 있습니다.

  • cache 파티션. 이 파티션은 임시 데이터를 저장합니다. 기기가 원활한 업데이트를 사용하는 경우에는 선택사항입니다. 캐시 파티션은 부트로더에서 쓰기 가능할 필요가 없지만 삭제는 가능해야 합니다. 파티션 크기는 기기 유형과 userdata의 공간 가용성에 따라 다릅니다. 일반적으로 50MB~100MB면 충분합니다.

  • misc 파티션. 이 파티션은 복구 파티션에서 사용되며 4KB 이상입니다.

  • userdata 파티션. 이 파티션에는 맞춤설정 데이터를 포함하여 사용자가 설치한 앱과 데이터가 포함됩니다.

  • metadata 파티션. 이 파티션은 기기에서 메타데이터 암호화를 사용할 때 메타데이터 암호화 키를 저장하는 데 사용됩니다. 크기는 16MB 이상입니다. 이 파티션은 암호화되지 않으며 그 데이터는 스냅샷 처리되지 않습니다. 기기가 초기화되면 파티션은 삭제됩니다. 이 파티션의 사용은 엄격하게 제한됩니다.

  • vendor 파티션. 이 파티션에는 AOSP에 배포할 수 없는 바이너리가 포함됩니다. 기기에 독점 정보가 포함되어 있지 않으면 이 파티션을 생략할 수 있습니다.

  • vendor_dlkm 파티션. 이 파티션은 공급업체 커널 모듈을 저장하는 데 사용됩니다. 공급업체 커널 모듈을 vendor 파티션이 아닌 vendor_dlkm 파티션에 저장하면 vendor 파티션을 업데이트하지 않고도 커널 모듈을 업데이트할 수 있습니다.

  • radio 파티션. 이 파티션은 무선 이미지를 포함하며 전용 파티션에 무선 관련 소프트웨어가 있는 기기(무선 기능 포함)에만 필요합니다.

  • tos 파티션. 이 파티션은 Trusty OS의 바이너리 이미지를 저장합니다. 기기에 Trusty가 있는 경우에만 사용됩니다. 자세한 내용은 TOS 파티션을 참고하세요.

  • pvmfw 파티션. 이 파티션은 보호된 VM에서 실행되는 첫 번째 코드인 보호된 가상 머신 펌웨어(pvmfw)를 저장합니다. 자세한 내용은 보호된 가상 머신 펌웨어를 참고하세요.

동적 파티션

Android 11 이상을 실행하는 기기는 동적 파티션을 지원할 수 있습니다. 동적 파티션은 무선 업데이트(OTA) 동안 파티션 만들기, 삭제 또는 파티션 크기 조절을 가능하게 하는 Android용 사용자 공간 파티션 나누기입니다. 자세한 내용은 동적 파티션을 참고하세요.

중요 파티션 지정

기기에서 특정 파티션이나 데이터를 실행해야 하는 경우 이러한 파티션/데이터를 완전히 보호되거나 다시 플래시 가능한 것으로 지정해야 합니다. 즉, 다시 빌드할 수 있거나 제공되거나 fastboot oem 명령어를 사용해 추출할 수 있습니다. 여기에는 기기당 공장별 설정, 일련번호, 보정 데이터 등의 데이터가 포함됩니다.

Android 11 변경사항

Android 11에는 라이브러리 및 새로운 Soong 이미지 변형 연결에 대한 제한사항을 포함하여 많은 파티션 변경사항이 포함되어 있습니다.

Android 파티션 레이아웃

그림 1. Android 11의 파티션 레이아웃

  • 단일 시스템 이미지(SSI). systemsystem_ext 이미지가 포함된 새로운 개념적 이미지입니다. 이러한 파티션이 일련의 대상 기기에서 일반적인 경우 이러한 기기는 SSI를 공유하고 systemsystem_ext 이미지 빌드를 건너뛸 수 있습니다.

  • system_ext 파티션. system 리소스를 사용할 수 있고 다음과 같은 시스템 모듈을 포함할 수 있는 새 파티션입니다.

    • system 파티션에서 AOSP 시스템 모듈을 확장하는 시스템 모듈. 이러한 모듈을 나중에 system 파티션에 설치할 수 있도록 AOSP에 업스트림하는 것이 좋습니다.

    • OEM 또는 SoC 관련 모듈을 번들로 묶는 시스템 모듈. 이러한 모듈을 product 또는 vendor 파티션에 설치할 수 있도록 번들 해제하는 것이 좋습니다.

  • system 파티션. OEM 제품에 사용되는 일반적인 시스템 이미지입니다. 독점 모듈을 AOSP로 업스트림하거나 system_ext 파티션으로 이동하여 system 파티션 외부로 이동하는 것이 좋습니다.

  • product 파티션. 이제 이 파티션은 허용된 인터페이스를 사용하여 다른 파티션과 번들로 묶이지 않은 제품별 모듈을 설치할 수 있습니다.

VNDK 변경사항

공급업체 네이티브 개발 키트(VNDK)system 파티션에 설치되며 공급업체의 HAL 구현만을 위해 설계된 일련의 라이브러리입니다.

  • Android 10 이하에서는 vendor 파티션을 system 파티션의 VNDK 라이브러리에 연결할 수 있지만 system 파티션의 다른 라이브러리에는 연결할 수 없습니다. product 파티션의 네이티브 모듈은 system 파티션의 모든 라이브러리에 연결할 수 있습니다.

  • Android 11 이상에서는 productvendor 파티션을 system 파티션의 VNDK 라이브러리에 연결할 수 있지만 system 파티션의 다른 라이브러리에는 연결할 수 없습니다.

Soong 제품 변형

Soong 빌드 시스템은 이미지 변형을 사용하여 빌드 종속 항목을 분할합니다. 네이티브 모듈(/build/soong/cc)은 시스템 프로세스 모듈을 핵심 변형으로, 공급업체 프로세스 모듈을 공급업체 변형으로 변경할 수 있습니다. 단, 한 이미지 변형에 있는 모듈을 다른 이미지 변형에 있는 다른 모듈에 연결할 수 없습니다.

  • Android 10 이하에서는 시스템 모듈이 핵심 변형을 자동으로 만듭니다. 또한 Android.bp 파일에서 vendor_available: true를 정의하여 공급업체 변형을 만들 수 있습니다. 이렇게 하면 공급업체 모듈을 시스템 모듈에 연결할 수 있습니다. 또한 system 라이브러리의 공급업체 변형인 VNDK 라이브러리는 Android.bp 파일에서 vendor_available: true를 정의하여 공급업체 모듈의 공급업체 변형을 만들 수 있습니다(예시 참고).

  • Android 11에서는 시스템 모듈이 vendor_available: true를 정의하여 (핵심 및 공급업체 변형 외에) 제품 변형도 만들 수 있습니다.

  • Android 12 이상에서는 vendor_available: true가 있는 시스템 모듈이 핵심 변형 외에 공급업체 변형도 만듭니다. 제품 변형을 만들려면 product_available: true를 정의해야 합니다. product_available: true가 없는 일부 VNDK 라이브러리는 제품 모듈에서 사용할 수 없습니다.