Sanal A/B yamalarını uygulama

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

*2 * sum(update groups) boyutundan 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 ...

Aşağıda günlüğün bir örneği verilmiştir:

[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 CL puanına sahip seçeneği belirleyin. 1399393, yeniden inşa etme ve yanıp sönme Cihaz, kurtarma işlemini şu şekilde kullanmıyorsa başlatma bölümü veya kurtarma başlatın.

Birleştirme sırasında segmentasyon hatası düzeltme

Bir OTA güncellemesi uygulandıktan sonra, VAB birleştirme işlemi sırasında update_engine_client --cancel, CleanupPreviousUpdateAction ürününün kilitlenmesine neden oluyor. CEVAP markSlotSuccessful geç geldiğinde de olası joker işaretçi hatası oluşur.

Bu sorun, StopActionInternal işlevi eklenerek çözüldü. CleanupPreviousUpdateAction, yok edildiğinde bekleyen görevleri iptal eder. Bir değişkendir. Şu tarihte: 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'nin ön koşulu)
  • CL 1439372 (CleanupPreviousUpdateAction: destroy işleminde bekleyen görevleri iptal et)
  • CL 1663460 ( markSlotSuccessful geç geldiğinde olası joker işaretçi hatası)

update_engine erken birleştirmeyi önleme

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 yeniden başlatılır. Birleştirme işlemi başlatıldığı için cihaz şu işlemi gerçekleştiremiyor: açılır ve çalışamaz 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 ön koşuldur)
  • CL 1439372 (CleanupPreviousUpdateAction: Kaldırma işlemi sırasında beklemedeki görevleri iptal et)
  • CL 1663460 (markSlotSuccessful geç geldiğinde olası genel işaretçi hatasını düzeltme)
  • CL 1664859 (isteğe bağlı - CleanupPreviousUpdateAction için unittest ekleyin)

Doğru dm-verity yapılandırmasını sağlama

Android 11 ve sonraki sürümlerde cihazlar yanlışlıkla aşağıdaki dm-verity seçenekleriyle yapılandırılabilir:

  • Çekirdekteki 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, A/B cihazları da çalışmayabilir. Yalnızca AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO doğrulama modunu kullanın.

  1. Çekirdekte CONFIG_DM_VERITY_AVB=n ayarlayın.
  2. Cihazları şunu kullanacak şekilde yapılandırın: Bunun yerine AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO modunu kullanın.

Daha fazla bilgi için Verity belgelerine bakın: dm-verity hatalarını ele alma.

Birleştirilmiş dosyanın doğru şekilde yapılandırıldığını doğrulama

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. Sanal A/B'yi doğrulamak için: birleştirilen hedef dosyada yapılandırmaların doğru olduğundan emin olmak için yamalar: CL 2084183 (dinamik bölüm bilgilerinde özdeş anahtar/değer çiftlerini birleştirme)

Gerekli bileşenleri güncelleme

snapuserd, Android 13'ten itibaren satıcı RAM'inden genele taşındı ramdisk'e dokunun. Cihazınız Android 13'e geçiyorsa her iki durumda da satıcı ramdisk'i ve genel ramdisk'te snapuserd kopyası bulunur. Burada Sanal A/B için snapuserd 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).