Android 10 destekler dinamik bölümler, bir kullanıcı alanı bölümlendirmesi kablosuz güncellemeler sırasında bölümleri oluşturabilen, yeniden boyutlandırabilen ve yok eden bir sistemdir.
Bu sayfada, OTA istemcilerinin A/B cihazları için güncelleme sırasında dinamik bölümleri nasıl yeniden boyutlandırdığı açıklanmaktadır kullanıma sunulan uygulamamızı keşfedin.
Arka plan
Dinamik bölümleri desteklemek için bir A/B cihazının güncellenmesi sırasında
Cihazdaki GUID bölüm tablosu (GPT) korunduğu için
Cihazda super
bölümü. Meta veriler şurada depolanır:
system_a
ve system_b
ancak bu olabilir
BOARD_SUPER_PARTITION_METADATA_DEVICE
değiştirilerek özelleştirilmiş.
Blok cihazların her birinde iki meta veri yuvası bulunur. Yalnızca bir
her blok cihazdaki meta veri yuvası kullanılır. Örneğin, Meta Veri 0,
system_a
ve Meta Veri 1, system_b
sırasıyla A ve B yuvalarındaki bölümlere karşılık gelir. Kuyruklu a işareti
hangi alanın güncellendiği önemli değildir.
Bu sayfada, meta veri yuvaları Metadata S (Meta Veri S) olarak adlandırılır.
(kaynak) ve Meta Veri T (hedef) olur. Benzer şekilde, bölümler
system_s
, vendor_t
vb. olarak değiştirin.
Sistem yapılandırmaları oluşturma hakkında daha fazla bilgi edinmek için Cihazların yeni sürüme geçirilmesi.
Bölümlerin nasıl çalıştığı hakkında daha fazla bilgi: update gruplarıyla ilgili daha fazla bilgi Masa yeni cihazlar için yapılandırma değişiklikleri başlıklı makaleyi inceleyin.
Bir cihazdaki meta veri örneği:
- Fiziksel blok cihazı
system_a
- Meta Veri 0
- Grup
foo_a
- Mantıksal (dinamik) bölümlendirme
system_a
- Mantıksal (dinamik) bölümlendirme
product_services_a
. - Foo tarafından güncellenen diğer bölümler
- Mantıksal (dinamik) bölümlendirme
- Grup
bar_a
- Mantıksal (dinamik) bölümlendirme
vendor_a
- Mantıksal (dinamik) bölümlendirme
product_a
. - Çubuk tarafından güncellenen diğer bölümler
- Mantıksal (dinamik) bölümlendirme
- Grup
- Meta veri 1 (kullanılmıyor)
- Meta Veri 0
- Fiziksel blok cihazı
system_b
- Meta veri 0 (kullanılmıyor)
- Meta veri 1
- foo_b grubu
- Mantıksal (dinamik) bölümlendirme
system_b
. - Mantıksal (dinamik) bölümlendirme
product_services_b
. - Foo tarafından güncellenen diğer bölümler
- Mantıksal (dinamik) bölümlendirme
- Grup çubuğu_b
- Mantıksal (dinamik) bölümlendirme
vendor_b
. - Mantıksal (dinamik) bölümlendirme
product_b
. - Çubuk tarafından güncellenen diğer bölümler
- Mantıksal (dinamik) bölümlendirme
- foo_b grubu
Şuradaki lpdump
aracını kullanabilirsiniz:
Meta verilerin dökümü için system/extras/partition_tools
en iyi yoludur. Örnek:
lpdump --slot 0 /dev/block/by-name/system_a
lpdump --slot 1 /dev/block/by-name/system_b
Güncellemeyi yenileme
Android 9 ve önceki sürümleri çalıştıran cihazlarda, cihazdaki OTA istemcisi , güncellemeden önce dinamik bölümlerin eşlenmesini desteklemiyor. Eşleme uygulanabilmesi için ek bir yama kümesi oluşturulur doğrudan mevcut fiziksel bölümlere yönlendirme yapabilirsiniz.
OTA oluşturucu, yeni bir sürüm super.img
tüm dinamik bölümlerin içeriğini içeriyorsa, daha sonra resmi böler
fiziksel blok cihazların boyutlarına uygun birden çok resme
her şeyi kapsıyor. Bu görsellere ad verilmiştir
super_system.img
, super_vendor.img
vb.
OTA istemcisi bu görüntüleri fiziksel bölümlere uygular
mantıksal (dinamik) bölümlere uygulamaktan daha iyidir.
OTA istemcisi dinamik bölümlerin nasıl eşleneceğini bilmediği için Bu bölümler için tüm yükleme sonrası adımlar otomatik olarak devre dışı bırakılır güncelleme paketi oluşturulduğunda. Görüntüleyin Yükleme sonrası yapılandırma inceleyebilirsiniz.
Güncelleme akışı Android 9'dakiyle aynıdır.
Güncellemeden önce:
ro.boot.dynamic_partitions= ro.boot.dynamic_partitions_retrofit=
Güncellemeden sonra:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Düzeltme sonrası yapılacak güncellemeler
Güçlendirme güncellemesinden sonra OTA istemcisi dinamik bölümlerle gösterilir. Kaynak bölümlerinin uzantıları hiçbir zaman kapsamaz veya hedef fiziksel bölümlerde gösterilir.
Normal güncelleme paketi kullanarak akışı güncelleme
super
bölümü meta verilerini başlatın.-
Meta Veri S'den (kaynak meta veri) yeni meta veri M oluşturun.
Örneğin, Meta Veri S'de [
system_s
,vendor_s
,product_s
] blok olarak cihaz kullanıyorsanız yeni meta veri M'de [system_t
,vendor_t
,product_t
] blok olarak cihazlar. M'de tüm gruplar ve bölümler silinir. -
Şuna göre hedef grupları ve bölümleri ekleyin:
Güncellemedeki
dynamic_partition_metadata
alanı manifest'ini kullanabilirsiniz. Her bölümün boyutu şurada bulunabilir:new_partition_info
- M'ye Meta Veri T'ye yazma.
- Cihaz haritalayıcısına eklenen bölümleri yazılabilir olarak eşleyin.
-
Meta Veri S'den (kaynak meta veri) yeni meta veri M oluşturun.
Örneğin, Meta Veri S'de [
- Güncellemeyi engelleme cihazlarına uygulayın.
- Gerekirse kaynak bölümlerini cihaz eşleyicisinde eşleyin salt okunur olarak ayarla. Bu, başka cihazdan yükleme için gereklidir çünkü kaynak bölümleri güncellemeden önce eşlenmez.
- Şuradaki tüm blok cihazlara tam veya delta güncellemesi uygula: unutmayın.
- 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.
Akışı, geriye dönük düzenleme güncelleme paketi kullanarak güncelleme
Güçlendirme güncelleme paketi halihazırda
dinamik bölümleri etkinleştirirse OTA istemcisi bölme işlemini uygular
Doğrudan engellenen cihazlarda super.img
dosyası mevcut. Güncelleme
retrospektif güncellemesine benzer. Görüntüleyin
Güncellemeleri yeniden düzenleme
inceleyebilirsiniz.
Örneğin, aşağıdakilerin geçerli olduğunu varsayalım:
- A yuvası etkin yuvadır.
-
system_a
, 0. alanda etkin meta verileri içeriyor. -
system_a
,vendor_a
veproduct_a
blok cihaz olarak kullanılıyor.
OTA istemcisi bir geriye dönük güncelleme güncelleme paketi aldığında,
super_system.img
, fiziksel system_b
,
vendor_b
fiziksel mağazada super_vendor.img
ve
product_b
adlı fiziksel saatte super_product.img
.
system_b
fiziksel blok cihazı doğru
mantıksal system_b
öğesini eşlemek için meta verileri,
Açılış sırasında vendor_b
ve product_b
.
Güncelleme paketleri oluşturma
Artımlı OTA
Koruma amaçlı cihazlar için artımlı OTA'lar oluştururken güncellemeler
temel derlemenin tanımlanıp tanımlanmadığına
PRODUCT_USE_DYNAMIC_PARTITIONS
ve
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
.
-
Temel derleme değişkenleri tanımlamıyorsa bu
yenileme güncellemesi. Güncelleme paketi,
super.img
dosyasına sahip olan ve yükleme sonrası adımını devre dışı bırakır. - Temel derleme değişkenleri tanımlıyorsa bu, dinamik bölümlendirmelere sahip tipik güncelleme. Güncelleme paketi mantıksal (dinamik) bölümlerin resimlerini içerir. İlgili içeriği oluşturmak için kullanılan yükleme sonrası adımı etkinleştirilebilir.
Tam OTA
Koruma cihazları için iki tam OTA paketi oluşturulur.
-
$(PRODUCT)-ota-retrofit-$(TAG).zip
daima şunu içerir:super.img
öğesini böler ve yükleme sonrası adımı devre dışı bırakır izin verilir.-
Ek bir bağımsız değişkenle oluşturulur
--retrofit_dynamic_partitions
-ota_from_target_files
komut dosyası. - Tüm derlemelere uygulanabilir.
-
Ek bir bağımsız değişkenle oluşturulur
-
$(PRODUCT)-ota-$(TAG).zip
, şunun için mantıksal resimleri içerir: takip edebilirsiniz.- Bunu yalnızca dinamik bölümlendirmelere sahip derlemelere uygulayın etkin. Bunu zorunlu kılmayla ilgili ayrıntıları aşağıda bulabilirsiniz.
Eski derlemelerde geriye dönük olmayan güncellemeyi reddet
Normal tam OTA paketini yalnızca dinamik bölümlerin etkinleştirildiğinden emin olun. OTA sunucusu yapılandırıldıysa ve bu paketleri Android 9 veya sonraki sürümleri çalıştıran cihazlara aktarır cihaz başlatılamaz. Android 9 ve sonraki sürümlerde OTA istemcisi OTA paketi ile standart geliştirme paketi arasındaki istemci tam paketi reddetmez.
Cihazın OTA paketinin tamamını kabul etmesini önlemek için şunları yapabilirsiniz: Mevcut cihazı kontrol etmek için yükleme sonrası adım yapılması gerekir yapılandırma. Örnek:
device/device_name/dynamic_partitions/check_dynamic_partitions
#!/system/bin/sh DP_PROPERTY_NAME="ro.boot.dynamic_partitions" DP_RETROFIT_PROPERTY_NAME="ro.boot.dynamic_partitions_retrofit" DP_PROPERTY=$(getprop ${DP_PROPERTY_NAME}) DP_RETROFIT_PROPERTY=$(getprop ${DP_RETROFIT_PROPERTY_NAME}) if [ "${DP_PROPERTY}" != "true" ] || [ "${DP_RETROFIT_PROPERTY}" != "true" ] ; then echo "Error: applied non-retrofit update on build without dynamic" \ "partitions." echo "${DP_PROPERTY_NAME}=${DP_PROPERTY}" echo "${DP_RETROFIT_PROPERTY_NAME}=${DP_RETROFIT_PROPERTY}" exit 1 fi
device/device_name/dynamic_partitions/Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= check_dynamic_partitions LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := EXECUTABLES LOCAL_SRC_FILES := check_dynamic_partitions LOCAL_PRODUCT_MODULE := true include $(BUILD_PREBUILT)
device/device_name/device.mk
PRODUCT_PACKAGES += check_dynamic_partitions # OPTIONAL=false so that the error in check_dynamic_partitions will be # propagated to OTA client. AB_OTA_POSTINSTALL_CONFIG += \ RUN_POSTINSTALL_product=true \ POSTINSTALL_PATH_product=bin/check_dynamic_partitions \ FILESYSTEM_TYPE_product=ext4 \ POSTINSTALL_OPTIONAL_product=false \
Dinamik olmayan bir cihaza normal OTA paketi uygulandığında
bölümleri etkinleştirdiğinizde, OTA istemcisi
check_dynamic_partitions
, yükleme sonrası bir adım olarak
güncellemeyi reddeder.