Android 10, kablosuz güncellemeler sırasında bölümler oluşturabilen, yeniden boyutlandırabilen ve yok edebilen 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. Blok cihazı, fstab
içindeki /misc
için blk_device
girişiyle birlikte bulunmalıdır. Örneğin, fstab
dosyası aşağıdakileri listelerse:
/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 Verileri (kaynak) ve T Meta Verileri (hedef) olarak adlandırılır. Benzer şekilde, bölümler system_s
ve vendor_t
olarak adlandırılır.
Yükseltme işleminden önce Meta Veri S, kullanılan dinamik bölümlerle ilgili bilgileri içerir (genellikle system_s
, vendor_s
, product_s
vb.). Sistem, güncelleme sırasında bu bölümlerin kapsamını okuduğu için silinemez.
Bölümler güncelleme gruplarına aittir. Ayrıntılar için Dinamik bölüm 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
- 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)bar_b
grubu (önceki yükseltmeden kalan)
- Grup
- Meta veri 1
foo_a
grubu (önceki yükseltmeden kalan)- Grup
bar_a
(ö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
- Bölüm
- Grup
bar_b
- Bölüm
vendor_b
- Bölüm
product_b
- Çubuk tarafından güncellenen diğer bölümler
- Bölüm
Cihazınızdaki meta verileri dökmek için lpdump
aracını (system/extras/partition_tools
altındaki kaynak kod) kullanabilirsiniz. Örnek:
lpdump --slot 0 /dev/block/bootdevice/by-name/super
lpdump --slot 1 /dev/block/bootdevice/by-name/super
Akışı güncelleme
super
bölüm meta verilerini başlatın.- Kaynak dinamik bölümlerinin kapsamlarını Meta Veriler'den yükleyin. M, yüklenen meta veri olsun.
-
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. -
Güncelleme manifestindeki
dynamic_partition_metadata
alanına göre hedef gruplar ve bölümler ekleyin.
Her bölümün boyutunew_partition_info
içinde bulunabilir. - M'yi T meta verilerine yazın.
- Eklenen bölümleri cihaz eşleyicide yazılabilir olarak eşleyin.
- Güncellemeyi engellenen cihazlara uygulayın.
- Gerekirse cihaz eşleyicideki kaynak bölümlerini salt okunur olarak eşleyin. Kaynak bölümleri güncelleme öncesinde eşlenmediğinden bu, başka cihazdan yükleme işlemi için gereklidir.
- Hedef yuvasındaki tüm engelleme cihazlarına tam veya delta güncellemesi uygulayın.
- 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.
- 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ı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; }