Dinamik bölümlere sahip A/B cihazlar için OTA

Android 10, kablosuz (OTA) güncellemeler sırasında bölüm oluşturabilen, yeniden boyutlandırabilen ve bölüm silebilir bir kullanıcı alanı bölümlendirme sistemi olan dinamik bölümleri destekler.

Bu sayfada, dinamik bölüm desteğiyle kullanıma sunulan A/B cihazlar ve Android 9 ve önceki sürümleri çalıştıran cihazlar için güncelleme sırasında dinamik bölümlerin nasıl yeniden boyutlandırılacağı açıklanmaktadır.

Arka plan

Cihazda bir super bölümü var. Bu bölüme ek olarak ek bir slot eklenmemiştir. Engelleme cihazı, fstab'de /misc için blk_device girişiyle birlikte olmalıdır. Örneğin, fstab dosyası aşağıdakileri listeler:

/dev/block/bootdevice/by-name/misc    /misc    # Other fields

Bu durumda, super için blok cihaz /dev/block/bootdevice/by-name/super'te bulunmalıdır ancak super bölümünün fstab dosyasında listelenmesine gerek yoktur.

super bölümünde, bölümler için A/B slotlarına karşılık gelen 0 ve 1 numaralı iki meta veri yuvası vardır. Bu sayfada meta veri yuvaları S Meta Veri (kaynak) ve T Meta Veri (hedef) olarak adlandırılır. Benzer şekilde, bölümlere system_s, vendor_t vb. adlar verilir.

Yükseltmeden önce S meta verileri, kullanılan dinamik bölümlere (genellikle system_s, vendor_s, product_s vb.) ilişkin bilgileri içerir. Sistem, güncelleme sırasında bu bölümlerin kapsamlarını okuduğu için bu bölümler silinemez.

Bölümler güncelleme gruplarına aittir. Ayrıntılar için Dinamik bölümlendirmeyi uygulama başlıklı makaleyi inceleyin.

Bir cihazdaki meta verilere örnek olarak aşağıdakiler verilebilir.

  • Meta veri 0
    • Grup foo_a
      • Bölüm system_a
      • Bölüm product_services_a
      • Foo tarafından güncellenen diğer bölümler
    • Grup bar_a
      • Bölüm vendor_a
      • Bölüm product_a
      • Bar tarafından güncellenen diğer bölümler
    • foo_b grubu (önceki yükseltmeden kalan)
    • bar_b grubu (önceki yükseltmeden kalan)
  • Meta veri 1
    • foo_a grubu (önceki yükseltmeden kalan)
    • bar_a grubu (önceki yükseltmeden kalan)
    • Grup foo_b
      • Bölüm system_b
      • Bölüm product_services_b
      • Foo tarafından güncellenen diğer bölümler
    • Grup bar_b
      • Bölüm vendor_b
      • Bölüm product_b
      • Bar tarafından güncellenen diğer bölümler

Cihazınızdaki meta verileri dökmek için lpdump aracını (system/extras/partition_tools altındaki kaynak kod) kullanabilirsiniz. Örneğin:

lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super

Akışı güncelleme

  1. super bölüm meta verilerini başlatın.
    1. Kaynak dinamik bölümlerinin kapsamlarını Meta Veriler'den yükleyin. M, yüklenen meta veri olsun.
    2. M yalnızca _s son eki olan bölümleri ve grupları içerecek şekilde M'den hedef grupları ve bölümleri (örneğin, foo_t, bar_t) kaldırın.
    3. Güncelleme manifestindeki dynamic_partition_metadata alanına göre hedef gruplar ve bölümler ekleyin.
      Her bölümün boyutunu new_partition_info'da bulabilirsiniz.
    4. M'yi T meta verilerine yazın.
    5. Eklenen bölümleri cihaz eşleyicide yazılabilir olarak eşleyin.
  2. Güncellemeyi engellenen cihazlara uygulayın.
    1. Gerekirse cihaz eşleyicide kaynak bölümleri salt okunur olarak eşleyin. Kaynak bölümleri güncellemeden önce eşlenmediği için bu, harici yükleme için gereklidir.
    2. Hedef yuvada bulunan tüm engelleme cihazlarına tam veya delta güncellemesi uygulayın.
    3. Yükleme sonrası komut dosyasını çalıştırmak için bölümleri monte edin ve ardından bölümlerin montesini kaldırın.
  3. Hedef bölümlerin eşlemesini kaldırın.

Aşağıdaki sistem özellikleri, güncellemeden önce ve sonra ilgili değerlere sahip olmalıdır:

ro.boot.dynamic_partitions=true
ro.boot.dynamic_partitions_retrofit=true

Güncelleme manifest dosyasına grup ve bölüm ekleme

Dinamik bölümlere sahip bir A/B cihazda veya dinamik bölümler için destek ekleyen bir A/B cihazda OTA güncellemesi yaparken güncelleme manifest dosyasına grup ve bölüm eklemeniz gerekir. Aşağıdaki snippet'te, dinamik bölümleri desteklemek için güncelleme manifest'iyle ilgili ek bilgiler gösterilmektedir. Her alanla ilgili ayrıntılı dokümanlar için update_metadata.proto dosyasını inceleyin.

message DeltaArchiveManifest {
    optional DynamicPartitionMetadata dynamic_partition_metadata;
}

message DynamicPartitionMetadata {
    repeated DynamicPartitionGroup groups;
}

message DynamicPartitionGroup {
    required string name;
    optional uint64 size; // maximum size of group
    repeated string partition_names;
}