Pembaruan Sistem Non-A/B

Pada perangkat Android lama tanpa partisi A/B, ruang flash biasanya berisi partisi berikut:

sepatu bot
Berisi kernel Linux dan sistem file root minimal (dimuat ke dalam disk RAM). Ini me-mount sistem dan partisi lain dan memulai runtime yang terletak di partisi sistem.
sistem
Berisi aplikasi sistem dan pustaka yang memiliki kode sumber yang tersedia di Android Open Source Project (AOSP). Selama operasi normal, partisi ini dipasang hanya-baca; isinya hanya berubah selama pembaruan OTA.
penjual
Berisi aplikasi sistem dan pustaka yang tidak memiliki kode sumber yang tersedia di Android Open Source Project (AOSP). Selama operasi normal, partisi ini dipasang hanya-baca; isinya hanya berubah selama pembaruan OTA.
data pengguna
Menyimpan data yang disimpan oleh aplikasi yang diinstal oleh pengguna, dll. Partisi ini biasanya tidak tersentuh oleh proses pembaruan OTA.
cache
Area penyimpanan sementara yang digunakan oleh beberapa aplikasi (mengakses partisi ini memerlukan izin aplikasi khusus) dan untuk penyimpanan paket pembaruan OTA yang diunduh. Program lain menggunakan ruang ini dengan harapan file dapat hilang kapan saja. Beberapa instalasi paket OTA dapat menyebabkan partisi ini dihapus sepenuhnya. Cache juga berisi log pembaruan dari pembaruan OTA.
pemulihan
Berisi sistem Linux lengkap kedua, termasuk kernel dan biner pemulihan khusus yang membaca sebuah paket dan menggunakan isinya untuk memperbarui partisi lain.
lain-lain
Partisi kecil yang digunakan oleh pemulihan untuk menyimpan beberapa informasi tentang apa yang dilakukannya jika perangkat dihidupkan ulang saat paket OTA sedang diterapkan.

Kehidupan pembaruan OTA

Pembaruan OTA tipikal berisi langkah-langkah berikut:

  1. Perangkat melakukan pemeriksaan rutin dengan server OTA dan diberi tahu tentang ketersediaan pembaruan, termasuk URL paket pembaruan dan string deskripsi untuk ditunjukkan kepada pengguna.
  2. Perbarui unduhan ke cache atau partisi data, dan tanda tangan kriptografinya diverifikasi terhadap sertifikat di /system/etc/security/otacerts.zip . Pengguna diminta untuk menginstal pembaruan.
  3. Perangkat di-boot ulang ke mode pemulihan, di mana kernel dan sistem di partisi pemulihan di-boot alih-alih kernel di partisi boot.
  4. Biner pemulihan dimulai oleh init. Ia menemukan argumen baris perintah di /cache/recovery/command yang mengarahkannya ke paket yang diunduh.
  5. Pemulihan memverifikasi tanda tangan kriptografi paket terhadap kunci publik di /res/keys (bagian dari disk RAM yang terdapat dalam partisi pemulihan).
  6. Data diambil dari paket dan digunakan untuk memperbarui boot, sistem, dan/atau partisi vendor seperlunya. Salah satu file baru yang tertinggal di partisi sistem berisi konten partisi pemulihan baru.
  7. Perangkat reboot secara normal.
    1. Partisi boot yang baru diperbarui dimuat, dan dipasang dan mulai menjalankan binari di partisi sistem yang baru diperbarui.
    2. Sebagai bagian dari startup normal, sistem memeriksa isi partisi pemulihan terhadap konten yang diinginkan (yang sebelumnya disimpan sebagai file di /system ). Mereka berbeda, sehingga partisi pemulihan di-reflash dengan konten yang diinginkan. (Pada boot berikutnya, partisi pemulihan sudah berisi konten baru, jadi tidak diperlukan reflash.)

Pembaruan sistem selesai! Log pembaruan dapat ditemukan di /cache/recovery/last_log. # .

Perbarui paket

Paket pembaruan adalah file .zip yang berisi biner yang dapat dieksekusi META-INF/com/google/android/update-binary . Setelah memverifikasi tanda tangan pada paket, recovery mengekstrak biner ini ke /tmp dan menjalankan biner, dengan memberikan argumen berikut:

  • Perbarui nomor versi API biner . Jika argumen yang diteruskan ke biner pembaruan berubah, angka ini bertambah.
  • File deskriptor dari pipa perintah . Program pembaruan dapat menggunakan pipa ini untuk mengirim perintah kembali ke biner pemulihan, sebagian besar untuk perubahan UI, seperti menunjukkan kemajuan kepada pengguna.
  • Nama file paket pembaruan .zip file .

Paket pembaruan dapat menggunakan biner yang ditautkan secara statis sebagai biner pembaruan. Alat konstruksi paket OTA menggunakan program pembaru ( bootable/recovery/updater ), yang menyediakan bahasa skrip sederhana yang dapat melakukan banyak tugas penginstalan. Anda dapat mengganti biner lain yang berjalan di perangkat.

Untuk detail tentang biner updater, sintaks edify, dan fungsi bawaan, lihat Inside OTA Packages .

Bermigrasi dari rilis sebelumnya

Saat bermigrasi dari rilis Android 2.3/3.0/4.0, perubahan utama adalah konversi semua fungsi khusus perangkat dari sekumpulan fungsi C dengan nama yang telah ditentukan sebelumnya ke objek C++. Tabel berikut mencantumkan fungsi lama dan metode baru yang memiliki tujuan yang kira-kira setara:

fungsi C metode C++
perangkat_pemulihan_start() Perangkat::RecoveryStart()
perangkat_toggle_display()
perangkat_reboot_sekarang()
RecoveryUI::CheckKey()
(juga RecoveryUI::IsKeyPressed())
perangkat_handle_key() Perangkat::HandleMenuKey()
perangkat_perform_action() Perangkat::InvokeMenuItem()
perangkat_wipe_data() Perangkat::WipeData()
perangkat_ui_init() ScreenRecoveryUI::Init()

Konversi fungsi lama ke metode baru harus cukup mudah. Jangan lupa untuk menambahkan fungsi make_device() baru untuk membuat dan mengembalikan turunan dari subkelas Perangkat baru Anda.