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
di partisi misc
; jika data di sana cocok dengan boot-recovery
, bootloader akan melakukan booting ke image recovery
. Metode ini memungkinkan pekerjaan pemulihan
yang tertunda (misalnya, menerapkan OTA atau menghapus data) untuk dilanjutkan
hingga selesai.
Untuk mengetahui 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 di 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
. Pengupdate membuat kueri
HAL kontrol
boot,
mengupdate slot booting yang tidak digunakan, mengubah slot aktif menggunakan
HAL, dan memulai ulang ke sistem operasi yang diupdate. Untuk mengetahui detailnya, lihat
Menerapkan 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 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, 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.
Tentukan 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 ditandaiunbootable
dan ditandai sebagaislot-successful
; slot ini sekarang menjadi 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 di command line kernel.Isi parameter
slot_suffix
command line kernel.Booting. Jika tidak ditandai
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
terlebih dahulu mengkueri variabel current-slot
, lalu menggabungkan hasilnya
ke sistem untuk membuat nama partisi yang harus di-flash
(system_a
, system_b
, dll.).
Saat menetapkan 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 booting 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 mem-flash radio. Dalam hal ini, Anda seharusnya dapat memulai ulang dari partisi pemulihan kembali ke bootloader untuk menyelesaikan update.
Image pemulihan mem-flash radio. Fungsi ini dapat disediakan sebagai library atau utilitas biner.