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

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

Bu sayfada , Android 9 ve daha eski sürümleri çalıştıran cihazlar için dinamik bölüm desteğiyle başlatılan A/B cihazlarına yönelik bir 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 yuva eki eklenmemiştir. Blok aygıtının, fstab içindeki /misc için blk_device girişiyle birlikte mevcut olması gerekir. Örneğin, fstab dosyası şunları listeliyorsa:

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

O zaman super için blok aygıtı /dev/block/bootdevice/by-name/super içinde mevcut olmalıdır, ancak super bölümün fstab dosyasında listelenmesine gerek yoktur.

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

Yükseltmeden önce Meta Veri S, kullanılan dinamik bölümlere ilişkin bilgileri içerir (genellikle system_s , vendor_s , product_s vb.). Sistem, güncelleme sırasında bu bölümlerin kapsamlarını okur, dolayısıyla silinemez.

Bölümler güncelleme gruplarına aittir. Ayrıntılar için bkz . Dinamik Bölümleri Uygulama .

Bir cihazdaki meta veri örneği aşağıdaki gibidir.

  • Meta veriler 0
    • Grup foo_a
      • Bölüm system_a
      • product_services_a bölümlendirin
      • 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)
    • Grup bar_b (önceki yükseltmeden kalan)
  • Meta veriler 1
    • foo_a grubu (önceki yükseltmeden kalan)
    • Grup bar_a (önceki yükseltmeden kalan)
    • foo_b grubu
      • Bölümleme system_b
      • product_services_b bölümlendirin
      • 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

Meta verileri cihazınıza dökmek için lpdump aracını ( system/extras/partition_tools altındaki kaynak kodu) kullanabilirsiniz. Örneğin:

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

Akışı güncelle

  1. super bölüm meta verilerini başlatın.
    1. Kaynak dinamik bölümlerin kapsamlarını Meta Veri S'den yükleyin. Yüklenen meta verinin M olmasına izin verin.
    2. M'nin yalnızca _s son ekine sahip bölümleri ve grupları içermesi için hedef grupları ve bölümleri (örneğin, foo_t , bar_t ) M'den kaldırın.
    3. Güncelleme bildirimindeki dynamic_partition_metadata alanına göre hedef grupları ve bölümleri ekleyin.
      Her bölümün boyutu new_partition_info bulunabilir.
    4. Meta Veri T'ye M yazın.
    5. Eklenen bölümleri aygıt eşleyicide yazılabilir olarak eşleyin.
  2. Güncellemeyi blok cihazlara uygulayın.
    1. Gerekirse cihaz eşleyicideki kaynak bölümlerini salt okunur olarak eşleyin. Kaynak bölümler güncellemeden önce eşlenmediğinden bu, yandan yükleme için gereklidir.
    2. Hedef yuvadaki tüm blok cihazlara tam veya delta güncelleme uygulayın.
    3. Kurulum sonrası betiği çalıştırmak için bölümleri bağlayın ve ardından bölümlerin bağlantısını kesin.
  3. Hedef bölümlerin eşlemesini kaldırın.

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

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

Güncelleme bildirimine gruplar ve bölümler ekleyin

Dinamik bölümlere sahip bir A/B cihazında veya dinamik bölümler için destek ekleyen bir A/B cihazında OTA güncellemesi gerçekleştirirken, güncelleme bildirimine gruplar ve bölümler eklemeniz gerekir. Aşağıdaki kod parçası, dinamik bölümleri desteklemek için güncelleme bildirimine ilişkin ek bilgileri gösterir. Her alanla ilgili ayrıntılı belgeler için update_metadata.proto'ya bakın.

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;
}