Untuk mendukung pembaruan over-the-air (OTA) , bootloader harus dapat mengakses disk RAM pemulihan selama boot. Jika perangkat menggunakan image pemulihan AOSP yang tidak dimodifikasi, bootloader membaca 32 byte pertama pada partisi misc
; jika data di sana cocok boot-recovery
, bootloader melakukan booting ke image recovery
. Metode ini memungkinkan semua pekerjaan pemulihan yang tertunda (misalnya, menerapkan OTA atau menghapus data) untuk melanjutkan penyelesaian.
Untuk detail tentang konten blok dalam 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
.Merupakan tanggung jawab kerangka kerja Android untuk memanggil
markBootSuccessful
dari HAL. Bootloader tidak boleh menandai partisi sebagai berhasil di-boot.
Dukungan untuk kontrol boot HAL
Bootloader harus mendukung boot_control
HAL seperti yang didefinisikan dalam hardware/libhardware/include/hardware/boot_control.h
). Updater 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 yang terkait dengan partisi dan slot, termasuk:
Nama partisi harus menyertakan sufiks yang mengidentifikasi partisi mana yang termasuk dalam slot tertentu di bootloader. Untuk setiap partisi tersebut, ada variabel
has-slot: partition base name
yang sesuai dengan nilaiyes
. Slot diberi nama menurut abjad sebagai a, b, c, dll. yang 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 callbacksetActiveBootSlot
atau melalui perintahfastboot set_active
. Saat memodifikasi partisi yang merupakan bagian dari slot, bootloader menghapus "berhasil di-boot" dan mengatur ulang jumlah percobaan ulang untuk slot.
Bootloader juga harus menentukan slot mana yang akan dimuat. Gambar tersebut menunjukkan contoh proses pengambilan keputusan.
Tentukan slot mana yang akan dicoba. Jangan coba 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 adalah 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 untuk memperbaiki partisi sistem pada baris perintah kernel.Isi parameter
slot_suffix
baris perintah kernel.Boot. Jika tidak ditandai
slot-successful
, kurangislot-retry-count
.
Utilitas fastboot
menentukan partisi mana yang akan di-flash saat menjalankan perintah flash apa pun. Misalnya, menjalankan perintah fastboot flash system system.img
pertama-tama menanyakan variabel current-slot
kemudian menggabungkan hasilnya ke sistem untuk menghasilkan nama partisi yang harus di-flash ( system_b
system_a
dll.).
Saat menyetel 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
tidak dapat di- slot-unbootable
).
Perangkat tanpa pembaruan A/B
Untuk mendukung pembaruan OTA pada perangkat yang tidak menggunakan pembaruan A/B (lihat Perangkat yang tidak dapat diperbarui A/B ), pastikan bahwa bootloader perangkat memenuhi kriteria berikut.
Partisi
recovery
harus berisi gambar yang mampu membaca gambar 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. Ini dapat dicapai dengan salah satu dari dua cara:Bootloader mem-flash radio. Dalam hal ini, mungkin untuk mem-boot ulang dari partisi pemulihan kembali ke bootloader untuk menyelesaikan pembaruan.
Gambar pemulihan mengedipkan radio. Fungsionalitas ini dapat disediakan sebagai perpustakaan biner atau utilitas.