Dukungan Android 10 partisi dinamis, partisi ruang pengguna yang dapat membuat, mengubah ukuran, dan menghancurkan partisi selama update over-the-air (OTA).
Halaman ini menjelaskan cara klien OTA mengubah ukuran partisi dinamis selama update untuk perangkat A/B yang diluncurkan tanpa dukungan partisi dinamis dan cara klien OTA mengupgrade ke Android 10.
Latar belakang
Selama update perangkat A/B untuk mendukung partisi dinamis,
Tabel partisi GUID (GPT) di perangkat dipertahankan, sehingga tidak ada
Partisi super
di perangkat. Metadata disimpan di
system_a
dan system_b
, tetapi ini bisa berupa
disesuaikan dengan mengubah BOARD_SUPER_PARTITION_METADATA_DEVICE
.
Di setiap perangkat blok, ada dua slot metadata. Hanya satu
slot metadata di setiap
perangkat blok yang digunakan. Misalnya, Metadata 0 di
system_a
dan Metadata 1 pada system_b
sesuai dengan partisi
di slot A dan B. Di
runtime, tidak masalah slot mana yang sedang diperbarui.
Di halaman ini, slot metadata disebut Metadata S
(sumber) dan Metadata T (target). Demikian pula, partisi disebut
menjadi sebagai system_s
, vendor_t
, dan seterusnya.
Untuk mengetahui informasi selengkapnya tentang konfigurasi sistem build, lihat Mengupgrade perangkat.
Untuk informasi selengkapnya tentang cara kerja partisi update grup, lihat Papan perubahan konfigurasi untuk perangkat baru.
Contoh metadata di perangkat adalah:
- Perangkat blok fisik
system_a
- Metadata 0
- Grup
foo_a
- Partisi logis (dinamis)
system_a
- Partisi logis (dinamis)
product_services_a
- Partisi lain yang diperbarui oleh Foo
- Partisi logis (dinamis)
- Grup
bar_a
- Partisi logis (dinamis)
vendor_a
- Partisi logis (dinamis)
product_a
- Partisi lain yang diperbarui berdasarkan Panel
- Partisi logis (dinamis)
- Grup
- Metadata 1 (tidak digunakan)
- Metadata 0
- Perangkat blok fisik
system_b
- Metadata 0 (tidak digunakan)
- Metadata 1
- Grup foo_b
- Partisi logis (dinamis)
system_b
- Partisi logis (dinamis)
product_services_b
- Partisi lain yang diperbarui oleh Foo
- Partisi logis (dinamis)
- Bar_b grup
- Partisi logis (dinamis)
vendor_b
- Partisi logis (dinamis)
product_b
- Partisi lain yang diperbarui berdasarkan Panel
- Partisi logis (dinamis)
- Grup foo_b
Anda dapat menggunakan alat lpdump
di
system/extras/partition_tools
untuk membuang metadata pada
perangkat Anda. Contoh:
lpdump --slot 0 /dev/block/by-name/system_a
lpdump --slot 1 /dev/block/by-name/system_b
Retrofit pembaruan
Pada perangkat yang menjalankan Android 9 dan versi lebih lama, klien OTA di perangkat tidak mendukung pemetaan partisi dinamis sebelum pembaruan. Channel kumpulan patch tambahan dibuat sehingga pemetaan dapat diterapkan langsung ke partisi fisik yang ada.
Generator OTA akan membangun file super.img
akhir yang
berisi konten semua partisi dinamis, lalu membagi gambar
menjadi beberapa gambar yang sesuai dengan
ukuran perangkat blok fisik
sesuai dengan sistem, vendor, dan sebagainya. Gambar-gambar ini diberi nama
super_system.img
, super_vendor.img
, dan seterusnya.
Klien OTA menerapkan {i>image<i} ini ke partisi fisik, bukan
daripada menerapkan {i>image<i} untuk partisi logis (dinamis).
Karena klien OTA tidak tahu cara memetakan partisi dinamis, semua langkah pasca-penginstalan dinonaktifkan secara otomatis untuk partisi ini saat paket pembaruan dibuat. Lihat Mengonfigurasi pasca-penginstalan untuk mengetahui detail selengkapnya.
Alur updatenya sama seperti di Android 9.
Sebelum update:
ro.boot.dynamic_partitions= ro.boot.dynamic_partitions_retrofit=
Setelah update:
ro.boot.dynamic_partitions=true ro.boot.dynamic_partitions_retrofit=true
Update mendatang setelah retrofit
Setelah pembaruan retrofit, klien OTA diperbarui agar berfungsi dengan partisi dinamis. Luasnya untuk partisi sumber tidak pernah membentang di seluruh partisi fisik target.
Alur pembaruan menggunakan paket pembaruan reguler
- Lakukan inisialisasi metadata partisi
super
.-
Buat metadata M baru dari Metadata S (metadata sumber).
Misalnya, jika Metadata S menggunakan [
system_s
,vendor_s
,product_s
] sebagai blok perangkat, maka metadata baru M menggunakan [system_t
,vendor_t
,product_t
] sebagai blok perangkat. Semua grup dan partisi dihapus di M. -
Tambahkan grup target dan partisi sesuai dengan
Kolom
dynamic_partition_metadata
dalam update manifes. Ukuran setiap partisi dapat ditemukan dinew_partition_info
. - Tulis M ke Metadata T.
- Petakan partisi yang ditambahkan pada mapper perangkat sebagai dapat ditulis.
-
Buat metadata M baru dari Metadata S (metadata sumber).
Misalnya, jika Metadata S menggunakan [
- Menerapkan update pada perangkat blok.
- Jika perlu, petakan partisi sumber pada mapper perangkat sebagai hanya baca. Hal ini diperlukan untuk {i>sideload<i} karena partisi sumber tidak dipetakan sebelum pembaruan.
- Terapkan update penuh atau delta ke semua perangkat blok pada slot target.
- Pasang partisi untuk menjalankan skrip pasca-penginstalan, lalu melepas partisi.
- Batalkan pemetaan partisi target.
Memperbarui alur menggunakan paket update retrofit
Jika paket pembaruan retrofit diterapkan pada perangkat yang sudah
mengaktifkan partisi dinamis, klien OTA menerapkan pemisahan
File super.img
di perangkat blok secara langsung. Update
mirip dengan pembaruan retrofit. Lihat
Mengubah update
untuk mengetahui detailnya.
Misalnya, asumsikan hal berikut:
- Slot A adalah slot yang aktif.
-
system_a
berisi metadata aktif di slot 0. -
system_a
,vendor_a
, danproduct_a
digunakan sebagai perangkat blok.
Ketika klien OTA menerima paket pembaruan retrofit, itu berlaku
super_system.img
pada system_b
fisik,
super_vendor.img
pada vendor_b
fisik, dan
super_product.img
di product_b
fisik.
Perangkat blok fisik system_b
berisi
metadata untuk memetakan system_b
yang logis,
vendor_b
, dan product_b
pada saat booting.
Membuat paket update
OTA inkremental
Saat menghasilkan OTA inkremental untuk perangkat retrofit,
bergantung pada apakah build dasar mendefinisikan
PRODUCT_USE_DYNAMIC_PARTITIONS
dan
PRODUCT_RETROFIT_DYNAMIC_PARTITIONS
.
-
Jika build dasar tidak menentukan variabel, ini adalah
perkuatan pembaruan. Paket update berisi bagian
super.img
dan menonaktifkan langkah pasca-penginstalan. - Jika build dasar memang menentukan variabel, build ini sama dengan update standar dengan partisi dinamis. Paket update berisi image untuk partisi logis (dinamis). Tujuan pasca-penginstalan dapat diaktifkan.
OTA lengkap
Dua paket OTA lengkap dibuat untuk perangkat retrofit.
-
$(PRODUCT)-ota-retrofit-$(TAG).zip
selalu berisi memisahkansuper.img
dan menonaktifkan langkah pasca-penginstalan untuk pembaruan perkuatan.-
Ini dihasilkan dengan argumen tambahan
--retrofit_dynamic_partitions
menjadi Skripota_from_target_files
. - Kebijakan ini dapat diterapkan ke semua build.
-
Ini dihasilkan dengan argumen tambahan
-
$(PRODUCT)-ota-$(TAG).zip
berisi gambar logis untuk pembaruan berikutnya.- Terapkan ini hanya ke build dengan partisi dinamis mengaktifkan pembuatan versi. Lihat detail di bawah tentang cara menerapkannya.
Tolak update nonretrofit di build lama
Terapkan paket OTA lengkap reguler hanya untuk build dengan partisi dinamis diaktifkan. Jika server OTA dikonfigurasi dan mengirimkan paket tersebut ke perangkat yang menjalankan Android 9 atau lebih rendah, perangkat gagal booting. Klien OTA di Android 9 dan lebih rendah tidak dapat membedakan antara paket OTA retrofit dan paket OTA lengkap reguler, sehingga klien tidak akan menolak paket lengkap.
Untuk mencegah perangkat menerima paket OTA lengkap, Anda dapat memerlukan langkah pasca-penginstalan untuk memeriksa perangkat yang ada konfigurasi Anda. Contoh:
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 \
Saat paket OTA reguler diterapkan pada perangkat tanpa dinamis
partisi diaktifkan, klien OTA menjalankan
check_dynamic_partitions
sebagai langkah pasca-penginstalan dan
menolak pembaruan.