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_asystem_abölümüproduct_services_abölümü- Foo tarafından güncellenen diğer bölümler
- Grup bar_a
vendor_abölümüproduct_abölümü- Bard tarafından güncellenen diğer bölümler
foo_bgrubu (önceki yükseltmeden kalan)bar_bgrubu (önceki yükseltmeden kalan)
- Grup
- Meta veri 1
foo_agrubu (önceki yükseltmeden kalan)bar_agrubu (önceki yükseltmeden kalan)- Grup
foo_bsystem_bbölümüproduct_services_bbölümü- Foo tarafından güncellenen diğer bölümler
- Grup
bar_bvendor_bbölümüproduct_bbö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/superlpdump --slot 1 /dev/block/bootdevice/by-name/super
Güncelleme akışı
superbö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
_ssonekine 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_metadataalanına göre hedef grupları ve bölümleri ekleyin.
Her bölümün boyutununew_partition_infoiç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;
}