다음 패치를 선택하여 다음과 같은 알려진 문제를 해결하세요.
사이드로드 시 할당 가능한 공간 정확히 확인
*2 * 합계(업데이트 그룹 크기)*보다 크기가 작은 super 파티션이 있는 가상 A/B 기기에 전체 OTA 패키지를 사이드로드하면 복구 로그 /tmp/recovery.log
에서 다음과 같이 실패할 수 있습니다.
The maximum size of all groups with suffix _b (...) has exceeded half of allocatable space for dynamic partitions ...
다음은 로그의 예입니다.
[INFO:dynamic_partition_control_android.cc(1020)] Will overwrite existing partitions. Slot A may be unbootable until update finishes!
[...]
[ERROR:dynamic_partition_control_android.cc(803)] The maximum size of all groups with suffix _b (2147483648) has exceeded half of allocatable space for dynamic partitions 1073741824.
이 문제가 발생하면 CL 선택 1399393, 다시 빌드, 플래시 부팅 파티션 또는 복구 파티션(기기에서 복구를 부팅합니다.
병합 중 세분화 오류 해결
OTA 업데이트를 적용한 후 VAB 병합 프로세스 중에 update_engine_client --cancel
을 호출하면 CleanupPreviousUpdateAction
이 다운됩니다. 또한 markSlotSuccessful
이 늦게 제공될 경우 와일드 포인터 오류도 발생할 수 있습니다.
이 문제는 StopActionInternal
함수 추가를 통해 해결되었습니다.
CleanupPreviousUpdateAction
은 소멸 시 대기 중인 작업을 취소하며, 메시지 루프에서 대기 중인 작업의 작업 ID를 추적하는 변수를 유지합니다. segfault를 방지하기 위해 소멸 시 대기 중인 작업이 취소됩니다.
다음 변경사항이 Android 11 소스 트리에 있는지 확인하여 병합 중에 update_engine
에서 발생하는 SIGSEGV
비정상 종료 문제를 해결합니다.
- CL 1439792( CL 1439372 전제 조건)
- CL 1439372(
CleanupPreviousUpdateAction
: 소멸 시 대기 중인 작업 취소) - CL 1663460(
markSlotSuccessful
가 늦게 제공될 경우 잠재적인 와일드 포인터 오류 발생)
update_engine 조기 병합 방지
기기(Android 11 이상)가 부팅되고 부팅이 완료되면 update_engine
은 ScheduleWaitMarkBootSuccessful()
과 WaitForMergeOrSchedule()
을 호출합니다. 그러면 병합 프로세스가 시작됩니다. 하지만 기기가 이전 슬롯으로 재부팅됩니다. 병합이 이미 시작되었으므로 기기가 부팅되지 않고 작동할 수 없게 됩니다.
소스 트리에 다음 변경사항을 추가합니다. CL 1664859는 선택사항입니다.
- CL 1439792( CL 1439372 전제 조건)
- CL 1439372(
CleanupPreviousUpdateAction
: 소멸 시 대기 중인 작업 취소) - CL 1663460(
markSlotSuccessful
이 늦게 제공될 경우의 잠재적 와일드 포인터 오류 수정) - CL 1664859 (선택사항 -
CleanupPreviousUpdateAction
에unittest
추가)
올바른 dm-verity 구성 확인
Android 11 이상에서는 기기를 다음 dm-verity 옵션으로 잘못 구성할 수 있습니다.
- 커널의
CONFIG_DM_VERITY_AVB=y
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
없이 모든 verity 모드(예:AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE
)를 사용하도록 구성된 부트로더
이 기기 설정에서 verity 오류가 발생하면 vbmeta 파티션이 손상되고 비 A/B 기기는 작동하지 않게 렌더링됩니다. 마찬가지로 병합이 시작되면 A/B 기기도 작동하지 않을 수 있습니다. AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
verity 모드만 사용하세요.
- 커널에서
CONFIG_DM_VERITY_AVB=n
를 설정합니다. - 다음을 사용하도록 기기를 구성합니다.
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
모드를 대신 사용하세요.
자세한 내용은 verity 문서 dm-verity 처리 오류를 참조하세요.
병합된 파일이 올바르게 구성되었는지 확인
시스템 이미지와 공급업체 이미지를 따로 빌드한 다음 merge_target_files
를 사용하여 병합하면 병합 프로세스 중에 가상 A/B 구성이 잘못 삭제될 수 있습니다. 병합된 타겟 파일에서 가상 A/B 구성이 올바른지 확인하려면 CL 2084183 패치(동적 파티션 정보에서 동일한 키/값 쌍 병합)를 적용합니다.
필수 구성요소 업데이트
Android 13부터 snapuserd
가 공급업체 램디스크에서 일반으로 이동했습니다.
램디스크. 기기가 Android 13으로 업그레이드되는 경우 공급업체 램디스크와 일반 램디스크에 모두 snapuserd
의 사본이 포함될 수 있습니다. 이 경우에 가상 A/B에 snapuserd
의 시스템 사본이 필요합니다. 따라서
snapuserd
의 올바른 사본이 있으면 CL을 적용합니다.
2031243
(first_stage_ramdisk에 snapuserd
복사)