Aşağıdaki bilinen sorunları gidermek için aşağıdaki yamaları seçin.
Başka cihazdan yükleme yaparken ayrılabilir alanı doğru şekilde kontrol edin
Boyutu *2 * sum(update groups)*'ten küçük bir süper bölümü olan 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. Bu şablonda, mesaj döngüsündeki beklemedeki görevin görev kimliğini izleyen bir değişken bulunur. Yok etme işlemi sırasında beklemedeki görev, hatadan kaçınmak için 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 için ön koşuldur)
- CL 1439372
(
CleanupPreviousUpdateAction
: destroy işleminde bekleyen görevleri iptal et) - CL 1663460 (
markSlotSuccessful
geç geldiğinde olası genel 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.
Aşağıdaki değişiklikleri kaynak ağacınıza ekleyin. CL 1664859'un isteğe bağlı olduğunu unutmayın.
- CL 1439792 (CL 1439372 için bir ön koşul)
- CL 1439372
(
CleanupPreviousUpdateAction
: Kaldırma durumunda beklemedeki görevleri iptal etme) - 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. - Bunun yerine cihazları
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 şekilde 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
'nin bir kopyası bulunabilir. Bu durumda Sanal A/B, snapuserd
sistem kopyasını gerektirir. snapuserd
öğesinin doğru kopyasının hazır olduğundan emin olmak için CL
2031243 işlemini uygulayın
(snapuserd
öğesini first_stage_ramdisk öğesine kopyalayın).