Untuk mendukung pembaruan over-the-air (OTA) , bootloader harus dapat mengakses disk RAM pemulihan saat boot. Jika perangkat menggunakan image pemulihan AOSP yang tidak dimodifikasi, bootloader membaca 32 byte pertama pada partisi misc
; jika data di sana cocok dengan boot-recovery
, bootloader akan melakukan booting ke image recovery
. Metode ini memungkinkan pekerjaan pemulihan apa pun yang tertunda (misalnya, menerapkan OTA atau menghapus data) untuk dilanjutkan hingga selesai.
Untuk detail tentang konten blok di flash yang digunakan untuk komunikasi dengan pemulihan dan bootloader, lihat bootable/recovery/bootloader_message/bootloader_message.h .
Perangkat dengan pembaruan A/B
Untuk mendukung pembaruan OTA pada perangkat yang menggunakan pembaruan A/B , pastikan bootloader perangkat memenuhi kriteria berikut.
Kriteria umum
Semua partisi yang diperbarui melalui OTA harus dapat diperbarui saat sistem utama di-boot (dan tidak diperbarui dalam pemulihan).
Untuk mem-boot partisi
system
, bootloader meneruskan nilai berikut pada baris perintah kernel:ro root=/dev/[node] rootwait init=/init
.Kerangka kerja Android bertanggung jawab untuk memanggil
markBootSuccessful
dari HAL. Bootloader tidak boleh menandai partisi yang berhasil di-boot.
Dukungan untuk kontrol boot HAL
Bootloader harus mendukung boot_control
HAL sebagaimana didefinisikan dalam hardware/libhardware/include/hardware/boot_control.h
). Pembaru menanyakan kontrol boot HAL , memperbarui slot boot yang saat ini tidak digunakan, mengubah slot aktif menggunakan HAL, dan mem-boot ulang ke sistem operasi yang diperbarui. Untuk detailnya, lihat Menerapkan kontrol boot HAL .
Dukungan untuk slot
Bootloader harus mendukung fungsionalitas terkait partisi dan slot, antara lain:
Nama partisi harus menyertakan akhiran yang mengidentifikasi partisi mana yang termasuk dalam slot tertentu di bootloader. Untuk setiap partisi tersebut, terdapat variabel
has-slot: partition base name
yang sesuai dengan nilaiyes
. Slot diberi nama berdasarkan abjad sebagai a, b, c, dll. sesuai dengan partisi dengan akhiran_a
,_b
,_c
, dll. Bootloader harus memberi tahu sistem operasi slot mana yang di-boot menggunakan properti baris perintahandroidboot.slot_suffix
. Properti ini disetel melalui bootconfig untuk perangkat yang diluncurkan dengan Android 12 atau lebih baru.Nilai
slot-retry-count
diatur ulang ke nilai positif (biasanya3
), baik oleh kontrol boot HAL melalui panggilan baliksetActiveBootSlot
atau melalui perintahfastboot set_active
. Saat memodifikasi partisi yang merupakan bagian dari slot, bootloader akan menghapus "berhasil di-boot" dan mengatur ulang jumlah percobaan ulang untuk slot tersebut.
Bootloader juga harus menentukan slot mana yang akan dimuat. Gambar tersebut menunjukkan contoh proses pengambilan keputusan.
Tentukan slot mana yang akan dicoba. Jangan mencoba memuat slot bertanda
slot-unbootable
. Slot ini harus konsisten dengan nilai yang dikembalikan oleh fastboot, dan disebut sebagai slot saat ini.Jika slot saat ini tidak ditandai sebagai
slot-successful
dan memilikislot-retry-count = 0
, tandai slot saat ini sebagaislot-unbootable
. Kemudian pilih slot lain yang tidak ditandaiunbootable
dan ditandai sebagaislot-successful
; slot ini sekarang menjadi slot yang dipilih. Jika tidak ada slot saat ini yang tersedia, boot ke pemulihan atau tampilkan pesan kesalahan yang berarti kepada pengguna.Pilih
boot.img
yang sesuai dan sertakan jalur ke partisi sistem yang benar pada baris perintah kernel.Isi parameter
slot_suffix
baris perintah kernel.sepatu bot. Jika tidak ditandai
slot-successful
, kurangislot-retry-count
.
Utilitas fastboot
menentukan partisi mana yang akan di-flash ketika menjalankan perintah flash apa pun. Misalnya, menjalankan perintah fastboot flash system system.img
terlebih dahulu menanyakan variabel current-slot
kemudian menggabungkan hasilnya ke sistem untuk menghasilkan nama partisi yang harus di-flash ( system_a
, system_b
, dll.).
Saat mengatur slot saat ini menggunakan perintah fastboot set_active
atau perintah boot control HAL setActiveBootSlot
, bootloader harus memperbarui slot saat ini, menghapus slot-unbootable
dan slot-successful
, dan mengatur ulang jumlah percobaan ulang (ini adalah satu-satunya cara untuk menghapus slot-unbootable
).
Perangkat tanpa pembaruan A/B
Untuk mendukung pembaruan OTA pada perangkat yang tidak menggunakan pembaruan A/B (lihat Perangkat yang dapat diperbarui non-A/B ), pastikan bootloader perangkat memenuhi kriteria berikut.
Partisi
recovery
harus berisi citra yang mampu membaca citra sistem dari beberapa partisi yang didukung (cache
,userdata
) dan menulisnya ke partisisystem
.Bootloader harus mendukung reboot langsung ke mode pemulihan.
Jika pembaruan citra radio didukung, partisi
recovery
juga harus dapat mem-flash radio. Hal ini dapat dicapai dengan salah satu dari dua cara berikut:Bootloader mem-flash radio. Dalam hal ini, dimungkinkan untuk melakukan boot ulang dari partisi pemulihan kembali ke bootloader untuk menyelesaikan pembaruan.
Gambar pemulihan mem-flash radio. Fungsionalitas ini dapat disediakan sebagai perpustakaan biner atau utilitas.