Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Gambar Pemulihan

Pada perangkat non-A / B, image pemulihan harus berisi informasi dari image overlay device tree blob (DTB) atau Advanced Configuration and Power Interface (ACPI) . Saat perangkat tersebut melakukan 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 daripada 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 Perbarui skema Kepatuhan GKI Versi header boot (meluncurkan perangkat) Versi boot header (memutakhirkan perangkat) Gambar pemulihan khusus diperlukan
11 A / B,
A / B virtual
Iya 3 * T / A Tidak
A / B,
A / B virtual
Tidak 2, 3 0, 1, 2, 3 Tidak
non-A / B Iya 3 T / A Iya
non-A / B Tidak 2, 3 0, 1, 2, 3 Iya
10 (Q) A / B T / A 2 0, 1, 2 Tidak
non-A / B T / A 2 0, 1, 2 Iya
9 (P) A / B T / A 1 0, 1 Tidak
non-A / B T / A 1 0, 1 Iya
8 (O) A / B T / A N / A (dianggap 0) N / A (dianggap 0) Tidak
non-A / B T / A N / A (dianggap 0) N / A (dianggap 0) Iya

* Perangkat A / B yang menjalankan Android 11 atau lebih tinggi dan menggunakan Generic Kernel Image (GKI) harus menggunakan header boot utama 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 dan dtbo ) dan beralih di antara mereka selama pembaruan, 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 boot header versi 3 harus secara eksplisit menentukan versi 2 dari 2 header boot untuk image pemulihan secara terpisah. Sebagai contoh:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Untuk arsitektur yang tidak mendukung susunan perangkat, citra pemulihan dapat menyertakan citra ACPIO sebagai ganti citra DTBO.

Tentang kegagalan OTA dan citra 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 hamparan diperbarui (tetapi sebelum menyelesaikan pembaruan penuh), perangkat mencoba untuk boot ke mode pemulihan untuk menyelesaikan pembaruan OTA. Namun, karena partisi hamparan telah diperbarui, ketidakcocokan dapat terjadi dengan citra 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 gambar overlay sebagai bagian terpisah dalam format image boot ( harus menggunakan boot header versi 1 atau 2).

Perubahan gambar booting

Untuk mengizinkan image pemulihan memuat DTBO atau ACPIO pemulihan pada perangkat non-A / B yang menjalankan Android 9 atau lebih tinggi, perbarui struktur image booting sebagai berikut.

Bagian gambar booting 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
Recovery 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 booting dan jalur gambar overlay, lihat Pembuatan Versi Header Gambar Boot .

Menerapkan DTBO

Perangkat non-A / B yang menjalankan 9 atau lebih tinggi dapat mengisi bagian recovery_dtbo dari citra pemulihan. Untuk memasukkan recovery_dtbo gambar dalam recovery.img , dalam perangkat BoardConfig.mk :

  • Setel konfigurasi BOARD_INCLUDE_RECOVERY_DTBO ke true :

     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 disetel ke jalur gambar DTBO. Sistem build Android menggunakan variabel untuk menyetel argumen recovery_dtbo dari alat mkbootimg selama pembuatan image pemulihan.

Jika BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS , dan BOARD_PREBUILT_DTBOIMAGE disetel dengan benar, sistem build 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 memasukkan recovery_acpio gambar dalam recovery.img , dalam perangkat BoardConfig.mk :

  • Setel konfigurasi BOARD_INCLUDE_RECOVERY_ACPIO ke true :

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Perluas variabel BOARD_MKBOOTIMG_ARGS untuk menentukan versi header image 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 menyetel argumen recovery_acpio dari alat mkbootimg selama pembuatan image pemulihan.

Jika BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS , dan BOARD_RECOVERY_ACPIO disetel dengan benar, sistem build Android menyertakan ACPIO yang ditentukan oleh variabel BOARD_RECOVERY_ACPIO di recovery.img .