Aşağıdaki bilinen sorunları gidermek için aşağıdaki yamaları seçin.
Yandan yükleme yaparken ayrılabilir alanı doğru şekilde kontrol etme
Boyutu *2 * sum(update groups) *'dan küçük bir süper bölüme sahip sanal A/B cihaza tam OTA paketini yan yükleme işlemi, /tmp/recovery.log
kurtarma günlüğünde aşağıdaki hata mesajıyla başarısız olabilir:
The maximum size of all groups with suffix _b (...) has exceeded half of allocatable space for dynamic partitions ...
Günlüğe örnek:
[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.
Bu sorunla karşılaşırsanız CL1399393'ü seçin, yeniden oluşturun ve önyükleme bölümüne veya cihaz önyükleme olarak kurtarma kullanmıyorsa kurtarma bölümüne önyükleme yapın.
Birleştirme sırasında segmentasyon hatası düzeltme
OTA güncellemesi uygulandıktan sonra, VAB birleştirme işlemi sırasında update_engine_client --cancel
çağrısı CleanupPreviousUpdateAction
'un kilitlenmesine neden oluyor. markSlotSuccessful
geç geldiğinde de olası bir joker işareti hatası vardır.
Bu sorun, StopActionInternal
işlevi eklenerek çözüldü.
CleanupPreviousUpdateAction
, yok edildiğinde bekleyen görevleri iptal eder. İleti döngüsünde bekleyen görevin görev kimliğini izleyen bir değişken tutar. destroy işlevi çağrıldığında, segment hatası oluşmaması için bekleyen görev iptal edilir.
Birleştirme sırasında update_engine
'te SIGSEGV
kilitlenmelerini düzeltmek için Android 11 kaynak ağacınızda aşağıdaki değişikliklerin bulunduğundan emin olun:
- CL 1439792 (CL 1439372'nin ön koşulu)
- CL 1439372
(
CleanupPreviousUpdateAction
: destroy işleminde bekleyen görevleri iptal et) - CL 1663460 (
markSlotSuccessful
geç geldiğinde olası rastgele işaretçi hatasını düzeltme)
update_engine'in erken birleştirilmesini engelleme
Bir cihaz (Android 11 ve sonraki sürümler) açıldığında ve açma işlemi tamamlandığında update_engine
, ScheduleWaitMarkBootSuccessful()
ve WaitForMergeOrSchedule()
'yi çağırır. Bu işlem, birleştirme işlemini başlatır. Ancak cihaz, eski yuvada yeniden başlatılır. Birleştirme işlemi zaten başladığından cihaz başlatılamaz ve kullanılamaz hale gelir.
Kaynak ağacınıza aşağıdaki değişiklikleri ekleyin. CL 1664859'un isteğe bağlı olduğunu unutmayın.
- CL 1439792 (CL 1439372'nin ön koşulu)
- CL 1439372
(
CleanupPreviousUpdateAction
: destroy işleminde bekleyen görevleri iptal et) - CL 1663460 (
markSlotSuccessful
geç geldiğinde olası rastgele işaretçi hatasını düzeltme) - CL 1664859 (isteğe bağlı -
CleanupPreviousUpdateAction
içinunittest
ekleyin)
Doğru dm-verity yapılandırmasını kullandığınızdan emin olun
Android 11 ve sonraki sürümlerde cihazlar yanlışlıkla aşağıdaki dm-verity seçenekleriyle yapılandırılabilir:
- Çekirdekte
CONFIG_DM_VERITY_AVB=y
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
olmadan herhangi bir doğrulama modunu (ör.AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE
) kullanacak şekilde yapılandırılmış önyükleme yöneticisi.
Bu cihaz yapılandırmasında, doğrulama hataları vbmeta bölümünün bozulmasına neden olur ve A/B olmayan cihazları kullanılamaz hale getirir. Benzer şekilde, bir birleştirme işlemi başladıysa A/B cihazlar da çalışmayabilir. Yalnızca AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
doğrulama modunu kullanın.
- Çekirdekte
CONFIG_DM_VERITY_AVB=n
ayarlayın. - Cihazları bunun yerine
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO
modunu kullanacak şekilde yapılandırın.
Daha fazla bilgi için Verity belgelerine bakın: dm-verity hatalarını ele alma.
Birleştirilen dosyanın doğru yapılandırıldığını onaylama
Sistem görüntülerini ve tedarikçi firma görüntülerini ayrı ayrı oluşturuyorsanız ve bunları birleştirmek için merge_target_files
kullanıyorsanız sanal A/B yapılandırmaları, birleştirme işlemi sırasında yanlışlıkla bırakılabilir. Birleştirilen hedef dosyada sanal A/B yapılandırmalarının doğru olduğunu doğrulamak için aşağıdaki yamaları uygulayın: CL
2084183
(dinamik bölüm bilgilerinde aynı anahtar/değer çiftlerini birleştirme)
Gerekli bileşenleri güncelleme
Android 13'ten itibaren snapuserd
, tedarikçi ramdisk'inden genel ramdisk'e taşındı. Cihazınız Android 13'e yükseltiliyorsa hem tedarikçi ramdisk'i hem de genel ramdisk'te snapuserd
kopyası bulunabilir. Bu durumda, sanal A/B için snapuserd
'nin sistem kopyası gerekir. snapuserd
dosyasının doğru kopyasının bulunduğundan emin olmak için CL 2031243'ü uygulayın (snapuserd
dosyasını first_stage_ramdisk'e kopyalayın).