Pada perangkat non-A/B, image pemulihan harus berisi informasi dari blob pohon perangkat (DTB) atau image overlay Advanced Configuration and Power Interface (ACPI). Saat perangkat tersebut melakukan booting ke pemulihan, bootloader kemudian dapat memuat image overlay yang kompatibel dengan image pemulihan. Perangkat yang mendukung update A/B (lancar) harus menggunakan pemulihan sebagai booting, bukan partisi pemulihan terpisah (untuk mengetahui detailnya, lihat Menerapkan Update A/B).
Opsi untuk menyertakan DTBO/ACPIO pemulihan sebagai bagian dari image boot/pemulihan berbeda di antara rilis Android.
Rilis | Memperbarui skema | Kepatuhan GKI | Versi header booting (perangkat peluncuran) | Versi header booting (mengupgrade perangkat) | Diperlukan image pemulihan khusus |
---|---|---|---|---|---|
11 | A/B, A/B Virtual |
Ya | 3* | T/A | Tidak |
A/B, A/B Virtual |
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 (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 yang lebih tinggi dan menggunakan Generic Kernel Image (GKI) harus menggunakan versi header booting utama 3 agar kompatibel dengan partisi booting vendor.
Poin utama:
Perangkat A/B tidak perlu menentukan image pemulihan karena update A/B menggunakan dua set partisi (termasuk
boot
dandtbo
) dan beralih di antara keduanya selama update, sehingga tidak memerlukan image pemulihan. Perangkat A/B masih dapat menggunakan image pemulihan khusus.Perangkat non-A/B yang diluncurkan dengan Android 11 atau yang lebih tinggi dan menggunakan versi header boot 3 harus secara eksplisit menentukan versi header boot 2 untuk image pemulihan secara terpisah. Contoh:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Untuk arsitektur yang tidak mendukung pohon perangkat, image pemulihan dapat menyertakan image ACPIO, bukan image DTBO.
Tentang kegagalan OTA dan image pemulihan
Untuk mencegah kegagalan over-the-air (OTA) pada perangkat non-A/B, image pemulihan harus mandiri dan tidak bergantung pada image lain. Selama update OTA, jika terjadi masalah setelah image overlay diupdate (tetapi sebelum menyelesaikan update penuh), perangkat akan mencoba melakukan booting ke mode pemulihan untuk menyelesaikan update OTA. Namun, karena partisi overlay telah diupdate, ketidakcocokan dapat terjadi dengan image pemulihan (yang belum diupdate).
Untuk mencegah pemulihan bergantung pada partisi DTBO/ACPIO selama update, perangkat non-A/B yang menjalankan Android 9 atau yang lebih tinggi dapat menentukan image DTBO/ACPIO pemulihan yang berisi informasi dari image overlay sebagai bagian terpisah dalam format image boot (harus menggunakan versi header boot 1 atau 2).
Perubahan image boot
Untuk mengizinkan image pemulihan berisi DTBO atau ACPIO pemulihan pada perangkat non-A/B yang menjalankan Android 9 atau yang lebih tinggi, update struktur image boot sebagai berikut.
Bagian gambar boot | Jumlah halaman |
---|---|
Header booting (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 |
DTBO atau ACPIO Pemulihan (o halaman) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
Untuk mengetahui detail tentang argumen alat mkbootimg
untuk menentukan versi header image boot dan jalur image overlay, lihat Pembuatan Versi Header Image Boot.
Menerapkan DTBO
Perangkat non-A/B yang menjalankan Android 9 atau yang lebih tinggi dapat mengisi bagian
recovery_dtbo
dari image pemulihan. Untuk menyertakan gambar recovery_dtbo
dalam recovery.img
, di BoardConfig.mk
perangkat:
Tetapkan konfigurasi
BOARD_INCLUDE_RECOVERY_DTBO
ketrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan versi header gambar booting: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
disetel ke jalur gambar DTBO. Sistem build Android menggunakan variabel untuk menetapkan argumenrecovery_dtbo
dari alatmkbootimg
selama pembuatan image pemulihan.
Jika variabel BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
, dan BOARD_PREBUILT_DTBOIMAGE
ditetapkan dengan benar, sistem build Android akan menyertakan DTBO yang ditentukan oleh variabel BOARD_PREBUILT_DTBOIMAGE
dalam recovery.img
.
Menerapkan ACPIO
Perangkat non-A/B yang menjalankan Android 9 atau yang lebih tinggi dapat menggunakan
image overlay ACPIO (bukan image DTBO) dan dapat mengisi
bagian recovery_acpio
(bukan bagian recovery_dtbo
) dari
image pemulihan. Untuk menyertakan gambar recovery_acpio
di recovery.img
, di
BoardConfig.mk
perangkat:
Tetapkan konfigurasi
BOARD_INCLUDE_RECOVERY_ACPIO
ketrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan versi header gambar booting. Variabel harus lebih besar dari atau sama dengan 1 untuk mendukung pemulihan ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Pastikan variabel
BOARD_RECOVERY_ACPIO
disetel ke jalur gambar ACPIO. Sistem build Android menggunakan variabel untuk menetapkan argumenrecovery_acpio
alatmkbootimg
selama pembuatan image pemulihan.
Jika variabel BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
, dan BOARD_RECOVERY_ACPIO
ditetapkan dengan benar, sistem build Android akan menyertakan ACPIO yang ditentukan oleh variabel BOARD_RECOVERY_ACPIO
di recovery.img
.