Mendukung Pembaruan OTA

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 nilai yes . 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 perintah androidboot.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 (biasanya 3 ), baik oleh kontrol boot HAL melalui callback setActiveBootSlot atau melalui perintah fastboot 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.

Aliran slot bootloader
Gambar 1. Aliran slot bootloader
  1. 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.

  2. Jika slot saat ini tidak ditandai sebagai slot-successful dan memiliki slot-retry-count = 0 , tandai slot saat ini sebagai slot-unbootable . Kemudian pilih slot lain yang tidak ditandai unbootable dan ditandai sebagai slot-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.

  3. Pilih boot.img yang sesuai dan sertakan jalur untuk memperbaiki partisi sistem pada baris perintah kernel.

  4. Isi parameter slot_suffix baris perintah kernel.

  5. Boot. Jika tidak ditandai slot-successful , kurangi slot-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 partisi system .

  • 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.