A/B 이외 기기의 복구 이미지

A/B 이외 기기의 무선 업데이트(OTA) 오류를 방지하려면 복구 파티션은 독립되어 있어야 하며 다른 파티션을 사용할 수 없습니다. 기기 제조업체는 DeviceTree 또는 고급 구성 및 전원 인터페이스(ACPI)를 사용하여 검색할 수 없는 모든 기기를 명시할 수 있습니다.

복구 모드로 부팅 시 부트로더는 오버레이용 기기 트리 Blob(DTBO) 또는 복구 이미지와 호환되는 오버레이 이미지용 고급 구성 및 전원 인터페이스(ACPIO)를 로드해야 합니다. OTA 업데이트 도중 오버레이 이미지가 업데이트되었지만 업데이트가 완전히 완료되기 전에 문제가 발생하면 기기는 OTA 업데이트를 완료하기 위해 복구 모드로 부팅을 시도합니다. 그러나 오버레이 파티션이 이미 업데이트되었으므로 아직 업데이트되지 않은 복구 이미지와의 불일치가 발생할 수 있습니다.

이러한 상황을 방지하려면 Android 9 이상에서 복구 이미지에 오버레이 이미지의 정보도 포함해야 합니다. A/B가 아닌 기기의 복구 이미지에는 업데이트 중에 오버레이 파티션을 사용하지 않도록 커널에 추가된 기기의 오버레이 blob도 포함되어야 합니다.

Android 10 이상은 DTBO 대신 ACPI를 사용하는 아키텍처를 지원합니다.

부팅 이미지 변경사항

복구 이미지에 복구 DTBO 또는 ACPIO를 포함하기 위한 Android 9 이상의 부팅 이미지 형식은 다음과 같습니다.

부팅 헤더(1페이지)
커널(l페이지)
램디스크(m페이지)
2단계(n페이지)
복구 DTBO(o페이지)

또한 부팅 이미지를 생성하는 mkbootimg 도구는 이러한 오버레이를 지원하기 위해 다음 인수를 포함합니다.

인수 설명
header_version 부팅 이미지 헤더 버전을 설정합니다. 헤더 버전이 1 이상인 부팅 이미지는 복구 DTBO 섹션을 지원합니다.
recovery_dtbo 복구 DTBO 이미지 경로입니다.
recovery_acpio 복구 ACPIO 이미지 경로입니다.

레거시 부팅 이미지 헤더 수정에 관한 자세한 내용은 부팅 이미지 헤더 버전 관리를 참조하세요.

DTBO 구현

Android 9 이상을 실행하는 모든 기기는 새 부팅 이미지 헤더(버전 1)를 사용해야 하지만, A/B 이외의 기기만 복구 이미지의 recovery_dtbo 섹션을 채워야 합니다. recovery_dtbo 이미지를 recovery.img에 포함하려면 기기의 BoardConfig.mk에서 다음과 같이 처리합니다.

  • 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_ARGS, BOARD_PREBUILT_DTBOIMAGE가 올바르게 설정되면 Android 빌드 시스템은 BOARD_PREBUILT_DTBOIMAGE 변수에 의해 지정된 DTBO를 사용하여 recovery.img에 포함합니다.

ACPIO 구현

Android 10 이상을 실행하는 모든 기기는 새 부팅 이미지 헤더(버전 1)을 사용해야 하지만, A/B 이외의 기기만 recovery_acpio 섹션을 채워야 합니다. recovery_acpio 이미지를 recovery.img에 포함하려면 기기의 BoardConfig.mk에서 다음과 같이 처리합니다.

  • 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_ARGS, BOARD_RECOVERY_ACPIO가 올바르게 설정되면 Android 빌드 시스템이 BOARD_RECOVERY_ACPIO 변수에 의해 지정된 ACPIO를 사용하여 recovery.img에 포함합니다.

유효성 검사

Android 9 이상을 실행하는 모든 기기의 경우 공급업체 테스트 도구 모음(VTS)에서 부팅 이미지 및 복구 이미지의 형식을 검사하여 부팅 이미지 헤더가 버전 1을 사용하는지 확인합니다.