挑選下列修補程式即可解決下列已知問題。
在側載時正確檢查可用空間
在具有超級系列的虛擬 A/B 裝置上側載完整的 OTA 套件
分區大小小於 *2 * 總和(更新群組的大小)* 可能會失敗
在復原記錄 /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
當機。A 罩杯
當 markSlotSuccessful
延遲時,也存在潛在的野外指標錯誤。
已加入 StopActionInternal
函式即可解決這個問題。
CleanupPreviousUpdateAction
會在銷毀時取消待處理的工作。它會維持
變數,用於在訊息迴圈中追蹤待處理工作的工作 ID。在銷毀時,系統會取消待處理的工作,以免發生分段錯誤。
請確認您的 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
- 系統啟動載入程式已設定為使用任何 verity 模式 (例如
AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE
),但沒有AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
。
在這種裝置設定下,任何驗證錯誤都會導致 vbmeta 分區損毀,並使非 A/B 裝置無法運作。同樣地,如果合併已開始,A/B 裝置也可能無法運作。僅使用 AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
驗證模式。
- 在核心中設定
CONFIG_DM_VERITY_AVB=n
。 - 設定裝置以使用
請改為使用
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
模式。
詳情請參閱詳細說明文件:處理 dm-verity 錯誤:
確認合併檔案設定正確
如果您要分別建構系統映像檔和廠商映像檔,請使用
merge_target_files
進行合併,虛擬 A/B 設定可能
未正確捨棄。為了驗證虛擬 A/B 版本
請套用以下設定
修補程式:CL
2084183 年
(合併動態分區資訊中的相同鍵/值組)
更新必要元件
自 Android 13 起,snapuserd
已從供應商 ramdisk 移至一般性
ramdisk。如果裝置升級至 Android 13,供應商 RAM 磁碟和一般 RAM 磁碟都可能包含 snapuserd
的副本。在本
在這個情況下,虛擬 A/B 需要 snapuserd
的系統副本。為了確保
設定好正確的「snapuserd
」副本後,請套用 CL
2031243 年
(將 snapuserd
複製到 first_stage_ramdisk)。