Android 10, kablosuz (OTA) güncellemeleri 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, dinamik bölüm desteğiyle kullanıma sunulan A/B cihazlarda ve Android 9 ile daha eski sürümleri çalıştıran cihazlarda 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üm, yuva sonekli değil. Engelleme cihazı, fstab
içinde /misc
için blk_device
girişiyle birlikte mevcut olmalıdır. Örneğin, fstab
dosyası aşağıdakileri listeliyorsa:
/dev/block/bootdevice/by-name/misc /misc # Other fields
Ardından, super
için blok cihazı /dev/block/bootdevice/by-name/super
içinde bulunmalıdır ancak super
bölümünün fstab
dosyasında listelenmesi gerekmez.
super
bölümünde, bölümler için A/B yuvalarına karşılık gelen 0 ve 1 numaralı iki meta veri yuvası vardır. Bu sayfada, meta veri yuvalarına Meta Veri K (kaynak) ve Meta Veri H (hedef) adı verilir. Benzer şekilde, bölümler system_s
, vendor_t
vb. olarak adlandırılır.
Yükseltmeden önce, Metadata S, kullanılan dinamik bölümlerle ilgili bilgileri (genellikle system_s
, vendor_s
, product_s
vb.) içerir. Sistem, güncelleme sırasında bu bölümlerin kapsamlarını okur. Bu nedenle, bölümler silinemez.
Bölümler, güncelleme gruplarına aittir. Ayrıntılar için Dinamik Bölümleri Uygulama başlıklı makaleyi inceleyin.
Bir cihazdaki meta verilerle ilgili örnek aşağıda verilmiştir.
- Meta veri 0
- Grup
foo_a
system_a
bölümüproduct_services_a
bölümü- Foo tarafından güncellenen diğer bölümler
- Grup bar_a
vendor_a
bölümüproduct_a
bölümü- Bard tarafından güncellenen diğer bölümler
foo_b
grubu (önceki yükseltmeden kalan)bar_b
grubu (önceki yükseltmeden kalan)
- Grup
- Meta veri 1
foo_a
grubu (önceki yükseltmeden kalan)bar_a
grubu (önceki yükseltmeden kalan)- Grup
foo_b
system_b
bölümüproduct_services_b
bölümü- Foo tarafından güncellenen diğer bölümler
- Grup
bar_b
vendor_b
bölümüproduct_b
bölümü- Bard tarafından güncellenen diğer bölümler
Cihazınızdaki meta verileri boşaltmak 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
Güncelleme akışı
super
bölümü meta verilerini başlatın.- Kaynak dinamik bölümlerin kapsamlarını Metadata S'den yükleyin. Yüklenen meta veriler M olsun.
-
M'nin yalnızca
_s
sonekine sahip bölümleri ve grupları içermesi için M'den hedef grupları ve bölümleri (örneğin,foo_t
,bar_t
) kaldırın. -
Güncelleme manifest dosyasındaki
dynamic_partition_metadata
alanına göre hedef grupları ve bölümleri ekleyin.
Her bölümün boyutununew_partition_info
içinde bulabilirsiniz. - Write M to Metadata T.
- Eklenen bölümleri, cihaz eşleyici üzerinde yazılabilir olarak eşleyin.
- Güncellemeyi engellenen cihazlarda uygulayın.
- Gerekirse cihaz eşleyici üzerindeki kaynak bölümleri salt okunur olarak eşleyin. Güncellemeden önce kaynak bölümler eşlenmediği için bu, yan yükleme için gereklidir.
- Hedef yuvadaki tüm blok cihazlara tam veya delta güncelleme uygular.
- Yükleme sonrası komut dosyasını çalıştırmak için bölümleri bağlayın, ardından bölümleri ayırın.
- Hedef bölümlerin eşlemesini kaldırın.
Güncellemeden önce ve sonra aşağıdaki sistem özelliklerinin ilgili değerlere sahip olması gerekir:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Güncelleme manifestine gruplar ve bölümler ekleme
Dinamik bölümleri olan bir A/B cihazda veya dinamik bölümler için destek ekleyen bir A/B cihazda OTA güncellemesi yaparken güncelleme manifestine gruplar ve bölümler eklemeniz gerekir. Aşağıdaki snippet, dinamik bölümleri desteklemek için güncelleme manifestiyle ilgili ek bilgileri gösterir. Her alanla ilgili ayrıntılı doküman için update_metadata.proto dosyasına 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; }