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
- Bölüm
- Grup bar_a
- Bölüm
vendor_a
- Bölüm
product_a
- Bar tarafından güncellenen diğer bölümler
- Bölüm
-
foo_b
grubu (önceki yükseltmeden kalan) - Grup
bar_b
(önceki yükseltmeden kalan)
- Grup
- 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
- Bölümleme
- Grup
bar_b
- Bölüm
vendor_b
- Bölüm
product_b
- Bar tarafından güncellenen diğer bölümler
- Bölüm
-
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
-
super
bölüm meta verilerini başlatın.- Kaynak dinamik bölümlerin kapsamlarını Meta Veri S'den yükleyin. Yüklenen meta verinin M olmasına izin verin.
- 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. - Güncelleme bildirimindeki
dynamic_partition_metadata
alanına göre hedef grupları ve bölümleri ekleyin.
Her bölümün boyutunew_partition_info
bulunabilir. - Meta Veri T'ye M yazın.
- Eklenen bölümleri aygıt eşleyicide yazılabilir olarak eşleyin.
- Güncellemeyi blok cihazlara uygulayın.
- 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.
- Hedef yuvadaki tüm blok cihazlara tam veya delta güncelleme uygulayın.
- 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.
- 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; }