Untuk menerapkan update over the air (OTA), bootloader harus dapat mengakses disk RAM pemulihan selama booting. Jika perangkat
menggunakan image pemulihan AOSP yang tidak dimodifikasi, bootloader akan 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 semua pekerjaan pemulihan
yang tertunda (misalnya, menerapkan OTA atau menghapus data) untuk terus
diselesaikan.
Untuk detail tentang konten blok dalam flash yang digunakan untuk komunikasi oleh pemulihan dan bootloader, lihat bootable/recovery/bootloader_message/bootloader_message.h.
Perangkat dengan update A/B
Untuk mendukung update OTA di perangkat yang menggunakan update A/B, pastikan bootloader perangkat memenuhi kriteria berikut.
Kriteria umum
Semua partisi yang diupdate melalui OTA harus dapat diupdate saat sistem utama di-booting (dan tidak diupdate dalam pemulihan).
Untuk mem-booting partisi
system
, bootloader meneruskan nilai berikut pada command line kernel:ro root=/dev/[node] rootwait init=/init
.Framework Android bertanggung jawab untuk memanggil
markBootSuccessful
dari HAL. Bootloader tidak boleh menandai partisi sebagai berhasil di-booting.
Dukungan untuk HAL kontrol booting
Bootloader harus mendukung HAL boot_control
seperti yang ditentukan dalam
hardware/libhardware/include/hardware/boot_control.h
. Updater membuat kueri
boot control
HAL,
mengupdate slot booting yang tidak digunakan, mengubah slot aktif menggunakan
HAL, dan memulai ulang ke sistem operasi yang telah diupdate. Untuk mengetahui detailnya, lihat
Mengimplementasikan HAL kontrol
boot.
Dukungan untuk slot
Bootloader harus mendukung fungsi yang terkait dengan partisi dan slot, termasuk:
Nama partisi harus menyertakan akhiran yang mengidentifikasi partisi 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, dst. sesuai dengan partisi dengan akhiran_a
,_b
,_c
, dll. Bootloader harus memberi tahu sistem operasi slot mana yang di-booting menggunakan properti command lineandroidboot.slot_suffix
. Properti ini ditetapkan melalui bootconfig untuk perangkat yang diluncurkan dengan Android 12 atau yang lebih tinggi.Nilai
slot-retry-count
direset ke nilai positif (biasanya3
), baik oleh HAL kontrol booting melalui callbacksetActiveBootSlot
maupun melalui perintahfastboot set_active
. Saat memodifikasi partisi yang merupakan bagian dari slot, bootloader akan menghapus "berhasil di-booting" dan mereset jumlah percobaan ulang untuk slot.
Bootloader juga harus menentukan slot mana yang akan dimuat. Gambar ini menunjukkan contoh proses keputusan.
Menentukan slot yang akan dicoba. Jangan mencoba memuat slot yang ditandai
slot-unbootable
. Slot ini harus konsisten dengan nilai yang ditampilkan 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 ditandai sebagaiunbootable
dan ditandai sebagaislot-successful
; slot ini sekarang adalah slot yang dipilih. Jika tidak ada slot yang tersedia, lakukan booting ke pemulihan atau tampilkan pesan error yang bermakna kepada pengguna.Pilih
boot.img
yang sesuai dan sertakan jalur untuk memperbaiki partisi sistem pada command line kernel.Isi parameter
slot_suffix
command line kernel.Booting. Jika tidak ditandai sebagai
slot-successful
, kurangislot-retry-count
.
Utilitas fastboot
menentukan partisi mana yang akan di-flash saat menjalankan
perintah flash. Misalnya, menjalankan perintah fastboot flash system system.img
pertama-tama membuat kueri variabel current-slot
, lalu menggabungkan hasilnya
ke sistem untuk membuat nama partisi yang harus di-flash
(system_a
, system_b
, dll.).
Saat menyetel slot saat ini menggunakan perintah set_active
fastboot atau perintah setActiveBootSlot
HAL kontrol booting, bootloader harus mengupdate slot saat ini, menghapus slot-unbootable
dan slot-successful
, serta mereset jumlah percobaan ulang (ini adalah satu-satunya cara untuk menghapus slot-unbootable
).
Perangkat tanpa update A/B
Untuk mendukung update OTA di perangkat yang tidak menggunakan update A/B (lihat Perangkat non-A/B yang dapat diupdate), pastikan bootloader perangkat memenuhi kriteria berikut.
Partisi
recovery
harus berisi image yang mampu membaca image sistem dari beberapa partisi yang didukung (cache
,userdata
) dan menulisnya ke partisisystem
.Bootloader harus mendukung proses booting secara langsung ke mode pemulihan.
Jika update image radio didukung, partisi
recovery
juga harus dapat mem-flash radio. Hal ini dapat dilakukan dengan salah satu dari dua cara berikut:Bootloader akan berkedip radio. Dalam hal ini, Anda harus dapat memulai ulang dari partisi pemulihan kembali ke bootloader untuk menyelesaikan update.
Gambar pemulihan mengedipkan radio.Fungsi ini dapat disediakan sebagai library biner atau utilitas.