Pada perangkat non-A/B, citra pemulihan harus berisi informasi dari blob pohon perangkat (DTB) atau citra overlay Konfigurasi Lanjutan dan Antarmuka Daya (ACPI) . Saat perangkat tersebut melakukan booting ke pemulihan, bootloader kemudian dapat memuat gambar overlay yang kompatibel dengan gambar pemulihan. Perangkat yang mendukung pembaruan A/B (mulus) harus menggunakan pemulihan sebagai boot, bukan partisi pemulihan terpisah (untuk detailnya, lihat Menerapkan Pembaruan A/B ).
Opsi untuk menyertakan DTBO/ACPIO pemulihan sebagai bagian dari image boot/pemulihan berbeda antara rilis Android.
Melepaskan | Skema pembaruan | kepatuhan GKI | Versi header boot (perangkat peluncuran) | Versi header boot (meningkatkan perangkat) | Diperlukan gambar pemulihan khusus |
---|---|---|---|---|---|
11 | A/B, A/B maya | Ya | 3 * | T/A | TIDAK |
A/B, A/B maya | TIDAK | 2, 3 | 0, 1, 2, 3 | TIDAK | |
non-A/B | Ya | 3 | T/A | Ya | |
non-A/B | TIDAK | 2, 3 | 0, 1, 2, 3 | Ya | |
10 (Q) | A/B | T/A | 2 | 0, 1, 2 | TIDAK |
non-A/B | T/A | 2 | 0, 1, 2 | Ya | |
9 (P) | A/B | T/A | 1 | 0, 1 | TIDAK |
non-A/B | T/A | 1 | 0, 1 | Ya | |
8 (HAI) | A/B | T/A | T/A (dianggap 0) | T/A (dianggap 0) | TIDAK |
non-A/B | T/A | T/A (dianggap 0) | T/A (dianggap 0) | Ya |
* Perangkat A/B yang menjalankan Android 11 atau lebih tinggi dan menggunakan Generic Kernel Image (GKI) harus menggunakan header boot primer versi 3 agar kompatibel dengan partisi boot vendor .
Poin-poin penting:
Perangkat A/B tidak perlu menentukan citra pemulihan karena pembaruan A/B menggunakan dua set partisi (termasuk
boot
dandtbo
) dan beralih di antara keduanya selama pembaruan, sehingga menghilangkan kebutuhan akan citra pemulihan. Jika diinginkan, perangkat A/B masih dapat menggunakan citra pemulihan khusus.Perangkat non-A/B yang diluncurkan dengan Android 11 atau lebih tinggi dan menggunakan versi header boot 3 harus secara eksplisit menentukan versi header boot 2 untuk image pemulihan secara terpisah. Misalnya:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Untuk arsitektur yang tidak mendukung pohon perangkat, citra pemulihan dapat menyertakan citra ACPIO, bukan citra DTBO.
Tentang kegagalan OTA dan gambar pemulihan
Untuk mencegah kegagalan over-the-air (OTA) pada perangkat non-A/B, citra pemulihan harus mandiri dan tidak bergantung pada citra lainnya. Selama pembaruan OTA, jika masalah terjadi setelah gambar overlay diperbarui (tetapi sebelum menyelesaikan pembaruan penuh), perangkat akan mencoba melakukan booting ke mode pemulihan untuk menyelesaikan pembaruan OTA. Namun karena partisi overlay sudah diperbarui, mungkin terjadi ketidakcocokan dengan image pemulihan (yang belum diperbarui).
Untuk mencegah pemulihan bergantung pada partisi DTBO/ACPIO selama pembaruan, perangkat non-A/B yang menjalankan Android 9 atau lebih tinggi dapat menentukan gambar DTBO/ACPIO pemulihan yang berisi informasi dari gambar overlay sebagai bagian terpisah dalam format gambar boot ( harus menggunakan boot header versi 1 atau 2).
Perubahan gambar boot
Agar image pemulihan berisi DTBO atau ACPIO pemulihan pada perangkat non-A/B yang menjalankan Android 9 atau lebih tinggi, perbarui struktur image booting sebagai berikut.
Bagian gambar boot | Jumlah halaman |
---|---|
Header boot (1 halaman) | 1 |
Kernel (l halaman) | l = ( kernel_size + page_size - 1) / page_size |
Ramdisk (m halaman) | m = ( ramdisk_size + page_size - 1) / page_size |
Bootloader tahap kedua (n halaman) | n = ( second_size + page_size - 1) / page_size |
Pemulihan DTBO atau ACPIO (o halaman) | o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size |
Untuk detail tentang argumen alat mkbootimg
untuk menentukan versi header gambar boot dan jalur gambar overlay, lihat Pembuatan Versi Header Gambar Boot .
Menerapkan DTBO
Perangkat non-A/B yang menjalankan versi 9 atau lebih tinggi dapat mengisi bagian recovery_dtbo
pada citra pemulihan. Untuk menyertakan gambar recovery_dtbo
di recovery.img
, di perangkat BoardConfig.mk
:
Setel konfigurasi
BOARD_INCLUDE_RECOVERY_DTBO
ketrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan versi header gambar boot:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Pastikan variabel
BOARD_PREBUILT_DTBOIMAGE
diatur ke jalur gambar DTBO. Sistem build Android menggunakan variabel untuk menyetel argumenrecovery_dtbo
dari alatmkbootimg
selama pembuatan image pemulihan.
Jika variabel BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
, dan BOARD_PREBUILT_DTBOIMAGE
disetel dengan benar, sistem build Android akan menyertakan DTBO yang ditentukan oleh variabel BOARD_PREBUILT_DTBOIMAGE
di recovery.img
.
Menerapkan ACPIO
Perangkat non-A/B yang menjalankan Android 9 atau lebih tinggi dapat menggunakan gambar overlay ACPIO (bukan gambar DTBO) dan dapat mengisi bagian recovery_acpio
(bukan bagian recovery_dtbo
) pada gambar pemulihan. Untuk menyertakan gambar recovery_acpio
di recovery.img
, di perangkat BoardConfig.mk
:
Setel konfigurasi
BOARD_INCLUDE_RECOVERY_ACPIO
ketrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan versi header gambar boot. Variabel harus lebih besar atau sama dengan 1 untuk mendukung pemulihan ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Pastikan variabel
BOARD_RECOVERY_ACPIO
diatur ke jalur gambar ACPIO. Sistem build Android menggunakan variabel untuk menyetel argumenrecovery_acpio
alatmkbootimg
selama pembuatan image pemulihan.
Jika variabel BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
, dan BOARD_RECOVERY_ACPIO
disetel dengan benar, sistem build Android akan menyertakan ACPIO yang ditentukan oleh variabel BOARD_RECOVERY_ACPIO
di recovery.img
.