Pilih patch berikut untuk mengatasi masalah umum berikut.
Memeriksa ruang yang dapat dialokasikan dengan benar saat melakukan sideload
Melakukan sideload paket OTA lengkap pada perangkat A/B Virtual yang memiliki
partisi dengan ukuran lebih kecil dari *2 * sum(ukuran grup pembaruan)* mungkin gagal
dengan hal berikut dalam log pemulihan /tmp/recovery.log
:
The maximum size of all groups with suffix _b (...) has exceeded half of allocatable space for dynamic partitions ...
Berikut adalah contoh log:
[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.
Jika Anda mengalami masalah ini, pilih CL 1399393, build ulang, dan flash partisi booting atau partisi pemulihan jika perangkat tidak menggunakan pemulihan sebagai booting.
Memperbaiki kesalahan segmentasi selama penggabungan
Setelah menerapkan update OTA, selama proses penggabungan VAB, panggilan ke
update_engine_client --cancel
menyebabkan CleanupPreviousUpdateAction
error. J
potensi error pointer liar juga terjadi ketika markSlotSuccessful
terlambat.
Masalah ini diselesaikan dengan menambahkan fungsi StopActionInternal
.
CleanupPreviousUpdateAction
membatalkan tugas yang tertunda saat penghancuran. {i>User story<i} mempertahankan
yang melacak ID tugas dari tugas yang tertunda dalam loop pesan. Aktif
menghancurkan, tugas yang tertunda dibatalkan untuk menghindari {i>segfault<i}.
Pastikan perubahan berikut ada di hierarki sumber Android 11 untuk memperbaiki error SIGSEGV
di update_engine
selama penggabungan:
- CL 1439792 ( prasyarat untuk CL 1439372)
- CL 1439372
(
CleanupPreviousUpdateAction
: batalkan tugas yang tertunda saat penghancuran) - CL 1663460 (memperbaiki
potensi error pointer liar saat
markSlotSuccessful
terlambat)
Mencegah penggabungan prematur update_engine
Saat perangkat melakukan booting (Android 11 dan yang lebih tinggi), dan selesai,
update_engine
memanggil ScheduleWaitMarkBootSuccessful()
, dan
WaitForMergeOrSchedule()
. Tindakan ini akan memulai proses penggabungan. Namun, perangkat
melakukan {i>reboot<i} ke slot yang lama. Karena penggabungan sudah dimulai, perangkat gagal untuk
{i>booting<i} dan menjadi
tidak dapat dioperasikan.
Tambahkan perubahan berikut ke struktur hierarki sumber Anda. Perhatikan bahwa CL 1664859 bersifat opsional.
- CL 1439792 ( prasyarat untuk CL 1439372)
- CL 1439372
(
CleanupPreviousUpdateAction
: membatalkan tugas yang tertunda saat dihancurkan) - CL 1663460 (memperbaiki
potensi error pointer liar saat
markSlotSuccessful
terlambat) - CL 1664859 (opsional -
tambahkan
unittest
untukCleanupPreviousUpdateAction
)
Memastikan konfigurasi dm-verity yang benar
Di Android 11 dan yang lebih baru, perangkat dapat secara tidak sengaja dikonfigurasi dengan opsi dm-verity berikut:
CONFIG_DM_VERITY_AVB=y
di kernel- Bootloader yang dikonfigurasi untuk menggunakan mode verity apa pun, (seperti
AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE
), tanpaAVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
.
Dengan konfigurasi perangkat ini, error verity apa pun akan menyebabkan partisi vbmeta
rusak, dan membuat perangkat non-A/B tidak dapat beroperasi. Demikian pula, jika penggabungan
dimulai, perangkat A/B
mungkin juga tidak dapat dioperasikan. Hanya gunakan
Mode verifikasi AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
.
- Setel
CONFIG_DM_VERITY_AVB=n
di kernel. - Konfigurasikan perangkat untuk menggunakan
mode
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
.
Untuk informasi selengkapnya, lihat dokumentasi verifikasi: Menangani dm-verity Error.
Memastikan file yang digabungkan telah dikonfigurasi dengan benar
Jika Anda membangun citra sistem dan citra vendor secara terpisah, maka menggunakan
merge_target_files
untuk menggabungkannya, konfigurasi A/B Virtual mungkin
ditempatkan secara tidak benar
selama proses penggabungan. Untuk memverifikasi bahwa A/B Virtual
konfigurasi dalam file target yang digabungkan sudah benar, terapkan hal berikut
patch: CL
2084183
(menggabungkan pasangan kunci/val yang identik dalam info partisi dinamis)
Memperbarui komponen yang diperlukan
Mulai Android 13, snapuserd
telah dipindahkan dari ramdisk vendor ke ramdisk vendor
ramdisk. Jika perangkat Anda diupgrade ke Android 13, mungkin
ramdisk vendor dan ramdisk generik berisi salinan snapuserd
. Dalam situasi
ini, Virtual A/B memerlukan salinan sistem snapuserd
. Untuk memastikan
salinan snapuserd
yang benar sudah ada, terapkan CL
2031243
(salin snapuserd
ke first_stage_ramdisk).