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을 사용하는지 확인합니다.