OTA 업데이트 지원

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

무선(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 )으로 재설정됩니다. 슬롯의 일부인 파티션을 수정할 때 부트로더는 "성공적으로 부팅됨"을 지우고 슬롯의 재시도 횟수를 재설정합니다.

부트로더는 로드할 슬롯도 결정해야 합니다. 그림은 결정 프로세스의 예를 보여줍니다.

부트로더 슬로팅 흐름
그림 1. 부트로더 슬롯 플로우
  1. 시도할 슬롯을 결정합니다. slot-unbootable 로 표시된 슬롯을 로드하지 마십시오. 이 슬롯은 fastboot에서 반환된 값과 일치해야 하며 현재 슬롯이라고 합니다.

  2. 현재 슬롯이 slot-successful 로 표시되지 않고 slot-retry-count = 0 인 경우 현재 슬롯을 slot-unbootable 로 표시합니다. 그런 다음 unbootable 으로 표시되지 않고 slot-successful 표시되는 다른 슬롯을 선택합니다. 이 슬롯은 이제 선택된 슬롯입니다. 사용 가능한 현재 슬롯이 없으면 복구로 부팅하거나 사용자에게 의미 있는 오류 메시지를 표시합니다.

  3. 적절한 boot.img 를 선택하고 커널 명령줄에 올바른 시스템 파티션 경로를 포함합니다.

  4. 커널 명령줄 slot_suffix 매개변수를 채웁니다.

  5. 신병. slot-successful 로 표시되지 않은 경우 slot-retry-count 를 줄입니다.

fastboot 유틸리티는 플래시 명령을 실행할 때 플래시할 파티션을 결정합니다. 예를 들어 fastboot flash system system.img 명령을 실행하면 먼저 current-slot 변수를 쿼리한 다음 결과를 시스템에 연결하여 플래시해야 하는 파티션의 이름( system_a , system_b 등)을 생성합니다.

fastboot set_active 명령 또는 부팅 제어 HAL setActiveBootSlot 명령을 사용하여 현재 슬롯을 설정할 때 부트로더는 현재 슬롯을 업데이트하고 slot-unbootableslot-successful 을 지우고 재시도 횟수를 재설정해야 합니다(이것이 slot-unbootable 을 지우는 유일한 방법입니다. slot-unbootable ).

A/B 업데이트가 없는 기기

A/B 업데이트를 사용하지 않는 기기에서 OTA 업데이트를 지원하려면(A/B 업데이트가 불가능한 기기 참조) 기기 부트로더가 다음 기준을 충족하는지 확인하세요.

  • recovery 파티션에는 지원되는 일부 파티션( cache , userdata )에서 시스템 이미지를 읽고 이를 system 파티션에 쓸 수 있는 이미지가 포함되어야 합니다.

  • 부트로더는 복구 모드로 직접 재부팅을 지원해야 합니다.

  • 라디오 이미지 업데이트가 지원되는 경우 recovery 파티션도 라디오를 플래시할 수 있어야 합니다. 다음 두 가지 방법 중 하나로 수행할 수 있습니다.

    • 부트로더가 라디오를 깜박입니다. 이 경우 복구 파티션에서 부트로더로 다시 재부팅하여 업데이트를 완료할 수 있어야 합니다.

    • 복구 이미지가 라디오를 깜박입니다. 이 기능은 바이너리 라이브러리 또는 유틸리티로 제공될 수 있습니다.