복구 이미지

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

비 A/B 장치에서 복구 이미지는 장치 트리 blob(DTB) 또는 고급 구성 및 전원 인터페이스(ACPI) 오버레이 이미지의 정보를 포함해야 합니다. 이러한 장치가 복구로 부팅되면 부트로더는 복구 이미지와 호환되는 오버레이 이미지를 로드할 수 있습니다. A/B(원활한) 업데이트 를 지원하는 장치는 별도의 복구 파티션 대신 부팅으로 복구를 사용해야 합니다(자세한 내용은 A/B 업데이트 구현 참조).

부팅/복구 이미지의 일부로 복구 DTBO/ACPIO를 포함하는 옵션은 Android 릴리스마다 다릅니다.

풀어 주다 업데이트 구성표 GKI 준수 부팅 헤더 버전(실행 장치) 부팅 헤더 버전(장치 업그레이드) 전용 복구 이미지 필요
11 A/B,
가상 A/B
3 * 해당 없음 아니요
A/B,
가상 A/B
아니요 2, 3 0, 1, 2, 3 아니요
비 A/B 해당 없음
비 A/B 아니요 2, 3 0, 1, 2, 3
10 (Q) A/B 해당 없음 2 0, 1, 2 아니요
비 A/B 해당 없음 2 0, 1, 2
9(피) A/B 해당 없음 1 0, 1 아니요
비 A/B 해당 없음 1 0, 1
8 (오) A/B 해당 없음 N/A(0으로 간주) N/A(0으로 간주) 아니요
비 A/B 해당 없음 N/A(0으로 간주) N/A(0으로 간주)

* Android 11 이상을 실행하고 GKI(Generic Kernel Image) 를 사용하는 A/B 기기는 공급업체 부팅 파티션 과 호환되도록 기본 부팅 헤더 버전 3 을 사용해야 합니다.

키 포인트:

  • A/B 장치는 A/B 업데이트가 두 개의 파티션 세트( bootdtbo 포함)를 사용하고 업데이트 중에 파티션 사이를 전환하므로 복구 이미지를 지정할 필요가 없으므로 복구 이미지가 필요하지 않습니다. 원하는 경우 A/B 장치는 여전히 전용 복구 이미지를 사용할 수 있습니다.

  • Android 11 이상으로 실행되고 부팅 헤더 버전 3을 사용하는 비 A/B 기기는 복구 이미지에 대해 별도로 부팅 헤더 버전 2 를 명시적으로 지정해야 합니다. 예를 들어:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • 장치 트리를 지원하지 않는 아키텍처의 경우 복구 이미지에 DTBO 이미지 대신 ACPIO 이미지가 포함될 수 있습니다.

OTA 실패 및 복구 이미지 정보

비 A/B 장치에서 무선(OTA) 오류를 방지하려면 복구 이미지가 자급자족하고 다른 이미지와 독립적이어야 합니다. OTA 업데이트 중에 오버레이 이미지가 업데이트된 후(그러나 전체 업데이트를 완료하기 전에) 문제가 발생하면 장치는 OTA 업데이트를 완료하기 위해 복구 모드로 부팅을 시도합니다. 그러나 오버레이 파티션이 이미 업데이트되었기 때문에 (아직 업데이트되지 않은) 복구 이미지와 불일치가 발생할 수 있습니다.

업데이트 중에 복구가 DTBO/ACPIO 파티션에 의존하는 것을 방지하기 위해 Android 9 이상을 실행하는 비 A/B 기기는 오버레이 이미지의 정보가 포함된 복구 DTBO/ACPIO 이미지를 부팅 이미지 형식( 부트 헤더 버전 1 또는 2를 사용해야 함).

부팅 이미지 변경

Android 9 이상을 실행하는 비 A/B 기기에서 복구 이미지에 복구 DTBO 또는 ACPIO가 포함되도록 하려면 다음과 같이 부팅 이미지 구조를 업데이트합니다.

부팅 이미지 섹션 페이지 수
부팅 헤더(1페이지) 1
커널(l 페이지) l = ( kernel_size + page_size - 1) / page_size
램디스크(m 페이지) m = ( ramdisk_size + page_size - 1) / page_size
2단계 부트로더(n 페이지) n = ( second_size + page_size - 1) / page_size
복구 DTBO 또는 ACPIO(o 페이지) o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size

부팅 이미지 헤더 버전 및 오버레이 이미지 경로를 지정하기 위한 mkbootimg 도구 인수에 대한 자세한 내용은 부팅 이미지 헤더 버전 관리 를 참조하십시오.

DTBO 구현

9 이상을 실행하는 비 A/B 장치는 복구 이미지의 recovery_dtbo 섹션을 채울 수 있습니다. 장치 BoardConfig.mkrecovery.imgrecovery_dtbo 이미지를 포함하려면 다음을 수행합니다.

  • BOARD_INCLUDE_RECOVERY_DTBO 구성을 true 로 설정합니다.

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • BOARD_MKBOOTIMG_ARGS 변수를 확장하여 부팅 이미지 헤더 버전을 지정합니다.

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • BOARD_PREBUILT_DTBOIMAGE 변수가 DTBO 이미지의 경로로 설정되어 있는지 확인하십시오. Android 빌드 시스템은 이 변수를 사용하여 복구 이미지를 생성하는 동안 mkbootimg 도구의 recovery_dtbo 인수를 설정합니다.

BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGSBOARD_PREBUILT_DTBOIMAGE 변수가 올바르게 설정된 경우 Android 빌드 시스템은 recovery.imgBOARD_PREBUILT_DTBOIMAGE 변수로 지정된 DTBO를 포함합니다.

ACPIO 구현

Android 9 이상을 실행하는 비 A/B 기기는 DTBO 이미지 대신 ACPIO 오버레이 이미지를 사용할 수 있으며 복구 이미지의 recovery_acpio 섹션( recovery_dtbo 섹션 대신)을 채울 수 있습니다. 장치 BoardConfig.mkrecovery.imgrecovery_acpio 이미지를 포함하려면 다음을 수행합니다.

  • BOARD_INCLUDE_RECOVERY_ACPIO 구성을 true 로 설정합니다.

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • BOARD_MKBOOTIMG_ARGS 변수를 확장하여 부팅 이미지 헤더 버전을 지정합니다. 복구 ACPIO를 지원하려면 변수가 1 이상이어야 합니다.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • BOARD_RECOVERY_ACPIO 변수가 ACPIO 이미지의 경로로 설정되어 있는지 확인하십시오. Android 빌드 시스템은 이 변수를 사용하여 복구 이미지를 생성하는 동안 mkbootimg 도구의 recovery_acpio 인수를 설정합니다.

BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGSBOARD_RECOVERY_ACPIO 변수가 올바르게 설정된 경우 Android 빌드 시스템은 recovery.imgBOARD_RECOVERY_ACPIO 변수로 지정된 ACPIO를 포함합니다.