Pada perangkat non-A/B, image pemulihan harus berisi informasi dari device tree blob (DTB) atau image overlay Konfigurasi Lanjut dan Antarmuka Daya (ACPI) . Saat perangkat tersebut boot 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 alih-alih partisi pemulihan terpisah (untuk detailnya, lihat Menerapkan Pembaruan A/B ).
Opsi untuk menyertakan DTBO/ACPIO pemulihan sebagai bagian dari image boot/pemulihan berbeda di antara rilis Android.
Melepaskan | Perbarui skema | kepatuhan GKI | Versi header boot (perangkat peluncuran) | Versi header boot (mengupgrade perangkat) | Diperlukan gambar pemulihan khusus |
---|---|---|---|---|---|
11 | A/B, Virtual A/B | Ya | 3 * | T/A | Tidak |
A/B, Virtual A/B | 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 (T) | 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 (O) | 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 kunci:
Perangkat A/B tidak perlu menentukan gambar pemulihan karena pembaruan A/B menggunakan dua set partisi (termasuk
boot
dandtbo
) dan beralih di antara mereka selama pembaruan, menghilangkan kebutuhan akan gambar 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. Sebagai contoh:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Untuk arsitektur yang tidak mendukung pohon perangkat, gambar pemulihan dapat menyertakan gambar ACPIO, bukan gambar 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 lain. Selama pembaruan OTA, jika masalah terjadi setelah gambar overlay diperbarui (tetapi sebelum menyelesaikan pembaruan penuh), perangkat mencoba untuk boot ke mode pemulihan untuk menyelesaikan pembaruan OTA. Namun, karena partisi overlay telah diperbarui, ketidakcocokan dapat terjadi dengan gambar 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 image DTBO/ACPIO pemulihan yang berisi informasi dari image overlay sebagai bagian terpisah dalam format image booting ( harus menggunakan versi header boot 1 atau 2).
Perubahan gambar boot
Untuk mengizinkan image pemulihan berisi DTBO atau ACPIO pemulihan pada perangkat non-A/B yang menjalankan Android 9 atau lebih tinggi, perbarui struktur image boot sebagai berikut.
Bagian gambar boot | Jumlah halaman |
---|---|
Judul 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 image boot dan jalur image overlay, lihat Versi Boot Image Header .
Menerapkan DTBO
Perangkat non-A/B yang menjalankan 9 atau lebih tinggi dapat mengisi bagian recovery_dtbo
dari citra pemulihan. Untuk menyertakan gambar recovery_dtbo
di recovery.img
, di perangkat BoardConfig.mk
:
Setel konfigurasi
BOARD_INCLUDE_RECOVERY_DTBO
menjaditrue
: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 bahwa variabel
BOARD_PREBUILT_DTBOIMAGE
diatur ke jalur gambar DTBO. Sistem pembangunan Android menggunakan variabel untuk menyetel argumenrecovery_dtbo
dari alatmkbootimg
selama pembuatan citra pemulihan.
Jika BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
, dan BOARD_PREBUILT_DTBOIMAGE
disetel dengan benar, sistem pembangunan Android 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
) dari gambar pemulihan. Untuk menyertakan image recovery_acpio
di recovery.img
, di perangkat BoardConfig.mk
:
Setel konfigurasi
BOARD_INCLUDE_RECOVERY_ACPIO
menjaditrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan versi header gambar boot. Variabel harus lebih besar dari atau sama dengan 1 untuk mendukung pemulihan ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Pastikan bahwa variabel
BOARD_RECOVERY_ACPIO
diatur ke jalur gambar ACPIO. Sistem pembangunan Android menggunakan variabel untuk menyetel argumenrecovery_acpio
dari alatmkbootimg
selama pembuatan citra pemulihan.
Jika BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
, dan BOARD_RECOVERY_ACPIO
disetel dengan benar, sistem pembangunan Android menyertakan ACPIO yang ditentukan oleh variabel BOARD_RECOVERY_ACPIO
di recovery.img
.