Android 10, kablosuz (OTA) güncellemeler sırasında bölüm oluşturabilen, yeniden boyutlandırabilen ve bölüm silebilir 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üm, alan sonekine sahip değil. Engelleme cihazı, fstab
'de /misc
için blk_device
girişiyle birlikte 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 şurada bulunmalıdır:
/dev/block/bootdevice/by-name/super
, ancak
super
bölümünün
fstab
dosyası.
super
bölümünde iki
0 ve 1 numaralı meta veri alanları,
Bölümler için A/B yuvaları. Bu sayfada meta veri alanları
Meta Veri S (kaynak) ve Meta Veri T (hedef) olarak adlandırılır. Benzer şekilde, bölümlere system_s
,
vendor_t
vb. adlar verilir.
Yükseltme işleminden önce Meta Veri S,
kullanılan dinamik bölümler (genellikle system_s
,
vendor_s
, product_s
vb.). Sistem, güncelleme sırasında bu bölümlerin kapsamlarını okuduğu için bu bölümler silinemez.
Bölümler güncelleme gruplarına aittir. Görüntüleyin Uygulamanın Dynamic Partitions (Dinamik Bölümler) bölümüne göz atın.
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 çubuğu_a
- Bölüm
vendor_a
- Bölüm
product_a
- Bar tarafından güncellenen diğer bölümler
- Bölüm
- Grup
foo_b
(önceki yükseltmeden kalan) - Grup
bar_b
(önceki yükseltmeden kalan)
- Grup
- Meta veri 1
- Grup
foo_a
(önceki yükseltmeden kalan) bar_a
grubu (ö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
- Grup
lpdump
aracını kullanabilirsiniz (kaynak kodu
system/extras/partition_tools
) tıklayın.
en iyi yoludur. Ö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.
-
Hedef grupları ve bölümleri kaldırın (örneğin,
foo_t
,bar_t
) kaldırın. yalnızca_s
son ekini içeren bölümler ve gruplar. -
Güncelleme manifestindeki
dynamic_partition_metadata
alanına göre hedef gruplar ve bölümler ekleyin.
Her bölümün boyutununew_partition_info
'da bulabilirsiniz. - M'ye Meta Veri T'ye yazma.
- Eklenen bölümleri cihaz eşleyicide yazılabilir olarak eşleyin.
- Güncellemeyi engelleme cihazlarına uygulayın.
- Gerekirse cihaz eşleyicide kaynak bölümleri salt okunur olarak eşleyin. Kaynak bölümleri güncellemeden önce eşlenmediği için bu, yan yükleme için gereklidir.
- Hedefteki tüm engellenen cihazlara tam veya delta güncellemesi uygula yuvaya yerleştirilmiştir.
- Yükleme sonrası komut dosyasını çalıştırmak için bölümleri ekleyin ve bölümleri 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 manifestine grup ve bölüm ekle
Dinamik bölümlendirmelere sahip bir A/B cihazında OTA güncellemesi gerçekleştirirken veya dinamik bölümler için destek ekleyen bir A/B cihazına bağlı olarak güncelleme manifest dosyasına gruplar ve bölümler eklemeniz gerekir. Snippet aşağıda listelenen desteği desteklemek için güncelleme manifest'inde dinamik bölümlerle gösterilir. 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; }