Pada perangkat non-A/B, citra pemulihan harus berisi informasi dari device tree blob (DTB) atau Konfigurasi Lanjutan dan Antarmuka Daya (ACPI). Ketika hal tersebut perangkat melakukan booting ke pemulihan, {i>bootloader<i} kemudian dapat memuat gambar overlay yang kompatibel dengan image pemulihan. Perangkat yang mendukung A/B (mulus) update harus menggunakan pemulihan sebagai booting, bukan partisi pemulihan terpisah (untuk detailnya, lihat Mengimplementasikan A/B Info Terbaru).
Opsi untuk menyertakan DTBO/ACPIO pemulihan sebagai bagian dari booting/pemulihan gambar yang berbeda untuk setiap rilis Android.
Rilis | Perbarui skema | Kepatuhan GKI | Versi header booting (perangkat yang diluncurkan) | Versi header booting (mengupgrade perangkat) | Image pemulihan khusus diperlukan |
---|---|---|---|---|---|
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 (Kuartal) | 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 dari 3 agar menjadi kompatibel dengan booting vendor partisi.
Poin utama:
Perangkat A/B tidak perlu menentukan image pemulihan karena update A/B menggunakan dua set partisi (termasuk
boot
dandtbo
) dan beralih antarpartisi selama pembaruan, meniadakan kebutuhan akan gambar pemulihan. Perangkat A/B juga dapat tetap menggunakan {i> image<i} pemulihan khusus.Perangkat non-A/B yang diluncurkan dengan Android 11 atau yang lebih baru dan penggunaan header booting versi 3 harus secara eksplisit menentukan header booting versi 2 untuk gambar pemulihan secara terpisah. Contoh:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Untuk arsitektur yang tidak mendukung hierarki perangkat, image pemulihan dapat menyertakan gambar ACPIO, bukan gambar 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 gambar lain. Selama pembaruan OTA, jika masalah terjadi setelah gambar overlay diperbarui (tetapi sebelum menyelesaikan pembaruan lengkap), perangkat akan mencoba {i>booting<i} ke mode pemulihan untuk menyelesaikan pembaruan OTA. Namun, karena partisi overlay sudah diperbarui, ketidakcocokan bisa terjadi pada gambar pemulihan (yang belum belum diperbarui).
Untuk mencegah pemulihan agar tidak bergantung pada partisi DTBO/ACPIO selama perangkat non-A/B yang menjalankan Android 9 atau yang lebih tinggi dapat menentukan gambar DTBO/ACPIO pemulihan yang berisi informasi dari overlay sebagai bagian terpisah dalam format image booting (harus menggunakan header booting versi 1 atau 2).
Perubahan image booting
Untuk memungkinkan gambar pemulihan berisi DTBO atau ACPIO pemulihan pada non-A/B perangkat yang menjalankan Android 9 atau yang lebih tinggi, update booting struktur gambar sebagai berikut.
Bagian image booting | Jumlah halaman |
---|---|
Header booting (1 halaman) | 1 |
{i>Kernel<i} (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
guna menentukan image booting
versi header dan jalur gambar overlay, lihat Header Image Booting
Pembuatan versi.
Menerapkan DTBO
Perangkat non-A/B yang menjalankan versi 9 atau lebih tinggi dapat mengisi
recovery_dtbo
dari gambar pemulihan. Untuk menyertakan recovery_dtbo
gambar di recovery.img
, di perangkat BoardConfig.mk
:
Tetapkan konfigurasi
BOARD_INCLUDE_RECOVERY_DTBO
ketrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan header image booting versi: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
ditetapkan ke jalur Gambar DTBO. Sistem build Android menggunakan variabel tersebut untuk menyetel Argumenrecovery_dtbo
alatmkbootimg
selama pembuatan image pemulihan.
Jika BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
, dan
Variabel BOARD_PREBUILT_DTBOIMAGE
disetel dengan benar, sistem build Android
menyertakan DTBO yang ditentukan oleh variabel BOARD_PREBUILT_DTBOIMAGE
di
recovery.img
.
Mengimplementasikan ACPIO
Perangkat non-A/B yang menjalankan Android 9 atau yang lebih baru dapat menggunakan
gambar overlay ACPIO (bukan gambar DTBO) dan dapat mengisi
Bagian recovery_acpio
(bukan bagian recovery_dtbo
) dari
image pemulihan. Untuk menyertakan gambar recovery_acpio
di recovery.img
, di bagian
perangkat BoardConfig.mk
:
Tetapkan konfigurasi
BOARD_INCLUDE_RECOVERY_ACPIO
ketrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Perluas variabel
BOARD_MKBOOTIMG_ARGS
untuk menentukan header image booting . Variabel harus lebih besar dari atau sama dengan 1 untuk mendukung pemulihan atau “CPIO”.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Pastikan variabel
BOARD_RECOVERY_ACPIO
ditetapkan ke jalur Gambar ACPIO. Sistem build Android menggunakan variabel tersebut untuk menyetel Argumenrecovery_acpio
alatmkbootimg
selama pembuatan image pemulihan.
Jika BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
, dan
Variabel BOARD_RECOVERY_ACPIO
disetel dengan benar, sistem build Android
menyertakan ACPIO yang ditentukan oleh variabel BOARD_RECOVERY_ACPIO
di
recovery.img
.