Update sistem A/B

SDV mengikuti pendekatan Android standar untuk update sistem A/B (mulus). Dokumentasi AOSP terutama berlaku untuk SDV. Halaman ini menjelaskan penggunaan khusus untuk SDV dan jalur yang diketahui baik untuk membuat dan menerapkan paket update.

Saat ini, SDV dikonfigurasi untuk menggunakan update A/B non-virtual.

Menerapkan HAL kontrol booting

Image SDV Core untuk Cuttlefish (sdv_core_cf) menyediakan implementasi standar HAL kontrol booting berdasarkan hardware/interfaces/boot/aidl/default/. Bootloader lain harus menerapkan HAL untuk mendukung update A/B.

Lihat bagian Menerapkan HAL kontrol booting di dokumentasi AOSP untuk mengetahui detailnya. Anda dapat menggunakan bootctl yang disertakan pada image SDV debug (eng dan userdebug) untuk menguji penerapan.

Membuat paket OTA

Untuk mempelajari lebih lanjut, lihat: Membangun paket OTA. Petunjuk di halaman ini mengikuti dokumentasi AOSP dengan sedikit perbedaan.

Update lengkap

Dari root repositori:

source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output

Perintah ini menghasilkan file target di direktori dist_output. Untuk build sdv_core_cf lokal, biasanya sdv_core_cf-target_files-$USER.zip.

Untuk membuat paket OTA, Anda harus menggunakan ota_from_target_files. Tidak seperti di AOSP, paket tidak dibangun sebagai bagian dari m dist.

m ota_from_target_files
ota_from_target_files \
  dist_output/sdv_core_cf-target_files-$USER.zip \
  ota_update.zip

Update inkremental

Pemanggilan ota_from_target_files yang sama seperti di AOSP:

ota_from_target_files \
  -i PREVIOUS-sdv_core_cf-target_files.zip \
  dist_new/sdv_core_cf-target_files-$USER.zip \
  incremental_ota_update.zip

Menginstal paket OTA

Update diinstal menggunakan layanan update_engine. Build SDV debug mencakup update_engine_client yang dapat digunakan untuk men-debug dan menguji proses update.

Untuk menginstal paket OTA, jalankan:

system/update_engine/scripts/update_device.py ota_update.zip

Jika update diinstal dengan benar (status akhirnya adalah UPDATE_STATUS_UPDATED_NEED_REBOOT dan hasilnya adalah ErrorCode::kSuccess), update akan diaktifkan saat mulai ulang berikutnya.

Pembuatan Versi

Untuk update sistem, SDV menggunakan metadata paket OTA Android untuk menentukan apakah paket OTA memenuhi persyaratan dan dapat diinstal.

Untuk APEX, SDV juga mengikuti konsep Android terkait kemampuan update. Oleh karena itu, APEX dapat diupdate jika APEX bukan APEX bootstrap. Bootstrap APEX harus diupdate melalui update sistem, dan salah satu dari:

  • Versi yang dideklarasikan lebih tinggi daripada versi yang sudah diinstal, dan keduanya lebih besar dari atau sama dengan 1,

atau,

  • Versi yang dideklarasikan adalah APEX yang tidak diinstal sebelumnya dan versinya lebih tinggi daripada versi dalam daftar penolakan, jika tercantum.

SDV biasanya di-deploy ke beberapa sistem dalam jaringan. Oleh karena itu, Anda harus memastikan update yang dilakukan pada satu sistem dijalankan dengan benar. Namun, tindakan ini tidak menjamin bahwa semua sistem dapat berkomunikasi dengan benar.

Anda juga harus mengupdate seluruh jaringan, yang mengharuskan update paket layanan di-deploy ke semua mesin secara bersamaan atau update tidak berisi perubahan yang merusak. Misalnya, perubahan yang tidak kompatibel pada antarmuka.

Meskipun SDV tidak menyediakan alat untuk mendeteksi perubahan yang tidak kompatibel, pedoman kami menjelaskan cara menyelaraskan perubahan yang dilakukan pada antarmuka serta praktik terbaik yang diperlukan untuk men-deploy perubahan.

Selain itu, SDV mendukung mekanisme rollback untuk update sistem dan APEX. Jika sistem secara tidak sengaja memasuki status tidak memuaskan, kita dapat memulihkan status memuaskan terakhir yang diketahui.