무선(OTA) 업데이트 를 지원하려면 부트로더가 부팅 중에 복구 RAM 디스크에 액세스할 수 있어야 합니다. 기기가 수정되지 않은 AOSP 복구 이미지를 사용하는 경우 부트로더는 misc
파티션에서 처음 32바이트를 읽습니다. 데이터가 boot-recovery
와 일치하면 부트로더가 recovery
이미지로 부팅됩니다. 이 방법을 사용하면 보류 중인 복구 작업(예: OTA 적용 또는 데이터 제거)을 계속 완료할 수 있습니다.
복구 및 부트로더의 통신에 사용되는 플래시의 블록 내용에 대한 자세한 내용은 bootable/recovery/bootloader_message/bootloader_message.h 를 참조하십시오.
A/B 업데이트가 있는 기기
A/B 업데이트 를 사용하는 기기에서 OTA 업데이트를 지원하려면 기기 부트로더가 다음 기준을 충족하는지 확인하세요.
일반 기준
OTA를 통해 업데이트된 모든 파티션은 기본 시스템이 부팅되는 동안 업데이트할 수 있어야 합니다(복구 시 업데이트되지 않음).
system
파티션을 부팅하기 위해 부트로더는 커널 명령줄에 다음 값을 전달합니다.ro root=/dev/[node] rootwait init=/init
.HAL에서
markBootSuccessful
을 호출하는 것은 Android 프레임워크의 책임입니다. 부트로더는 파티션을 성공적으로 부팅된 것으로 표시해서는 안 됩니다.
부팅 제어 HAL 지원
부트로더는 hardware/libhardware/include/hardware/boot_control.h
에 정의된 boot_control
HAL을 지원해야 합니다. 업데이터는 부팅 제어 HAL 을 쿼리하고, 현재 사용되지 않는 부팅 슬롯을 업데이트하고, HAL을 사용하여 활성 슬롯을 변경하고, 업데이트된 운영 체제로 재부팅합니다. 자세한 내용 은 부팅 제어 HAL 구현 을 참조하세요.
슬롯 지원
부트로더는 다음을 포함하여 파티션 및 슬롯과 관련된 기능을 지원해야 합니다.
파티션 이름에는 부트로더의 특정 슬롯에 속하는 파티션을 식별하는 접미사가 포함되어야 합니다. 이러한 각 파티션에 대해 값이
yes
인 해당 변수has-slot: partition base name
이 있습니다. 슬롯은 접미사가_a
,_b
, _c 등인 파티션에 해당하는 알파벳순으로 a, b, c 등으로 이름이 지정됩니다. 부트로더는 명령줄 속성_c
를 사용하여 부팅된 슬롯을 운영 체제에androidboot.slot_suffix
합니다. 이 속성은 Android 12 이상으로 실행되는 기기의 경우 bootconfig를 통해 설정됩니다.slot-retry-count
값은setActiveBootSlot
콜백을 통해 또는fastboot set_active
명령을 통해 부팅 제어 HAL에 의해 양수 값(일반적으로3
)으로 재설정됩니다. 슬롯의 일부인 파티션을 수정할 때 부트로더는 "성공적으로 부팅됨"을 지우고 슬롯의 재시도 횟수를 재설정합니다.
부트로더는 로드할 슬롯도 결정해야 합니다. 그림은 결정 프로세스의 예를 보여줍니다.

시도할 슬롯을 결정합니다.
slot-unbootable
로 표시된 슬롯을 로드하지 마십시오. 이 슬롯은 fastboot에서 반환된 값과 일치해야 하며 현재 슬롯이라고 합니다.현재 슬롯이
slot-successful
로 표시되지 않고slot-retry-count = 0
인 경우 현재 슬롯을slot-unbootable
로 표시합니다. 그런 다음unbootable
으로 표시되지 않고slot-successful
표시되는 다른 슬롯을 선택합니다. 이 슬롯은 이제 선택된 슬롯입니다. 사용 가능한 현재 슬롯이 없으면 복구로 부팅하거나 사용자에게 의미 있는 오류 메시지를 표시합니다.적절한
boot.img
를 선택하고 커널 명령줄에 올바른 시스템 파티션 경로를 포함합니다.커널 명령줄
slot_suffix
매개변수를 채웁니다.신병.
slot-successful
로 표시되지 않은 경우slot-retry-count
를 줄입니다.
fastboot
유틸리티는 플래시 명령을 실행할 때 플래시할 파티션을 결정합니다. 예를 들어 fastboot flash system system.img
명령을 실행하면 먼저 current-slot
변수를 쿼리한 다음 결과를 시스템에 연결하여 플래시해야 하는 파티션의 이름( system_a
, system_b
등)을 생성합니다.
fastboot set_active
명령 또는 부팅 제어 HAL setActiveBootSlot
명령을 사용하여 현재 슬롯을 설정할 때 부트로더는 현재 슬롯을 업데이트하고 slot-unbootable
및 slot-successful
을 지우고 재시도 횟수를 재설정해야 합니다(이것이 slot-unbootable
을 지우는 유일한 방법입니다. slot-unbootable
).
A/B 업데이트가 없는 기기
A/B 업데이트를 사용하지 않는 기기에서 OTA 업데이트를 지원하려면(A/B 업데이트가 불가능한 기기 참조) 기기 부트로더가 다음 기준을 충족하는지 확인하세요.
recovery
파티션에는 지원되는 일부 파티션(cache
,userdata
)에서 시스템 이미지를 읽고 이를system
파티션에 쓸 수 있는 이미지가 포함되어야 합니다.부트로더는 복구 모드로 직접 재부팅을 지원해야 합니다.
라디오 이미지 업데이트가 지원되는 경우
recovery
파티션도 라디오를 플래시할 수 있어야 합니다. 다음 두 가지 방법 중 하나로 수행할 수 있습니다.부트로더가 라디오를 깜박입니다. 이 경우 복구 파티션에서 부트로더로 다시 재부팅하여 업데이트를 완료할 수 있어야 합니다.
복구 이미지가 라디오를 깜박입니다. 이 기능은 바이너리 라이브러리 또는 유틸리티로 제공될 수 있습니다.