Restart lembut

Android 11 mendukung soft restart, yang merupakan proses restart runtime di ruang pengguna yang digunakan untuk menerapkan pembaruan yang memerlukan reboot (misalnya, pembaruan pada paket APEX). Saat ini, soft restart terbatas pada proses yang dimulai setelah userdata dipasang.

Soft restart diminta dengan cara berikut:

  • Dari PowerManager , dengan memanggil PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • Dari shell, gunakan adb shell svc power reboot userspace atau adb reboot userspace

Setelah soft restart, penyimpanan terenkripsi kredensial tetap tidak terkunci.

Jika perangkat mendukung soft restart, maka metode API PowerManager.isRebootingUserspace() akan mengembalikan true , dan nilai properti sistem init.userspace_reboot.is_supported sama dengan 1 .

Jika perangkat tidak mendukung soft restart, panggilan ke PowerManager.reboot(PowerManager.REBOOT_USERSPACE) , adb reboot userspace , dan adb shell svc power reboot userspace gagal.

Eksekusi restart lunak

Setelah soft restart diminta (melalui PowerManager atau dari shell), init melakukan langkah-langkah berikut:

  1. Menerima sys.powerctl=reboot,userspace .

  2. Membagi proses UserspaceRebootWatchdogThread() terpisah untuk memantau soft restart.

  3. Memicu tindakan userspace-reboot-requested , yang mengatur ulang semua properti sistem yang mungkin memengaruhi soft restart. Properti yang terpengaruh:

    • sys.usb.config
    • sys.usb.state
    • sys.boot_completed
    • dev.bootcomplete
    • sys.init.updatable_crashing
    • sys.init.updatable_crashing_process_name
    • apexd.status
    • sys.user.0.ce_available
    • sys.shutdown.requested
    • service.bootanim.exit

    Properti di atas harus diatur lagi selama urutan boot. Jika diperlukan, Anda dapat mengatur ulang properti tambahan. Misalnya, lihat tindakan on userspace-reboot-requested di rootdir/init.rc .

  4. Menjalankan fungsi DoUserspaceReboot , yang melakukan tindakan berikut:

    1. Mengirim SIGTERM ke proses yang dimulai setelah userdata dipasang dan menunggu hingga proses berhenti.
    2. Setelah batas waktu tercapai, kirim SIGKILL untuk mematikan proses yang sedang berjalan.
    3. Panggilan /system/bin/vdc volume reset .
    4. Melepaskan perangkat pendukung zRAM.
    5. Melepaskan paket APEX yang aktif.
    6. Beralih kembali ke namespace pemasangan bootstrap.
    7. Memicu tindakan userspace-reboot-resume .

Jika pos pemeriksaan sistem file diminta sebelum soft restart, userdata akan dipasang ulang ke mode pos pemeriksaan selama tindakan userspace-reboot-fs-remount (lihat bagian berikut untuk detailnya). Restart lunak dipertimbangkan setelah sys.boot_completed property diatur ke 1 . Di akhir soft restart, tampilan tetap mati dan interaksi pengguna yang eksplisit diperlukan untuk membangunkannya.

Pos pemeriksaan sistem file

Jika pos pemeriksaan sistem file diminta sebelum soft restart, userdata akan dipasang ulang dalam mode checkpointing selama soft restart. Logika pemasangan ulang diimplementasikan dalam fungsi fs_mgr_remount_userdata_into_checkpointing , dan berbeda antar metode pos pemeriksaan. Khususnya, ketika userdata mendukung:

  • Pos pemeriksaan tingkat sistem file (misalnya, f2fs ), userdata dipasang ulang dengan opsi checkpoint=disable .

  • Pos pemeriksaan tingkat blok (misalnya, ext4 ), lalu /data dilepas dan semua perangkat pembuat peta perangkat induk yang dipasang di atasnya akan dimusnahkan. Selanjutnya, userdata dipasang menggunakan jalur kode yang sama seperti yang digunakan pada boot pos pemeriksaan normal.

Jika keyring tingkat sistem file digunakan untuk mengelola kunci terenkripsi kredensial (CE) dan terenkripsi perangkat (DE), maka kunci akan hilang setelah userdata dilepas. Untuk memungkinkan pemulihan kunci, saat memasang kunci ke keyring sistem file, vold juga menginstal kunci yang sama dengan jenis fscrypt-provisioning ke keyring tingkat sesi. Ketika init_user0 dipanggil, vold menginstal ulang kunci di keyring sistem file.

Penggantian ke reboot keras

Untuk memastikan bahwa soft restart tidak membuat perangkat berada dalam kondisi tidak dapat digunakan, Android 11 menyertakan fallback ke hard reboot yang dipicu ketika salah satu kondisi berikut terpenuhi:

  • Perangkat gagal memulai soft restart (yaitu, sys.init.userspace_reboot.in_progress=1 ) dalam batas waktu tertentu.
  • Suatu proses gagal berhenti dalam batas waktu tertentu.
  • Operasi /system/bin/vdc volume reset gagal.
  • Pelepasan perangkat zRAM gagal.
  • Paket APEX yang aktif tidak dipasang dengan benar.
  • Upaya untuk memasang kembali userdata ke mode pos pemeriksaan gagal.
  • Perangkat gagal melakukan booting (yaitu, sys.boot_completed=1 ) dalam batas waktu tertentu.

Konfigurasi per perangkat

Beberapa aspek soft restart dapat disesuaikan dengan mengubah nilai properti berikut:

  • init.userspace_reboot.is_supported mengontrol kapan perangkat dapat melakukan soft restart. Jika nilai properti ini false , 0 , atau tidak ditentukan, maka upaya untuk memulai ulang akan ditolak.
  • init.userspace_reboot.sigkill.timeoutmillis mengontrol batas waktu dalam milidetik agar proses yang menerima sinyal SIGKILL berhenti. Jika salah satu proses gagal dihentikan dalam batas waktu yang ditentukan, maka fallback ke hard reboot akan terpicu.
  • init.userspace_reboot.sigterm.timeoutmillis mengontrol batas waktu dalam milidetik untuk menghentikan proses yang menerima sinyal SIGTERM . Semua proses yang gagal dihentikan dalam batas waktu yang diberikan menerima sinyal SIGKILL .
  • init.userspace_reboot.started.timeoutmillis mengontrol batas waktu dalam milidetik untuk memulai soft restart (yaitu, sys.init.userspace_reboot.in_progress=1 ). Jika perangkat gagal memulai soft restart dalam batas waktu yang ditentukan, fallback ke hard reboot akan terpicu.
  • init.userspace_reboot.userdata_remount.timeoutmillis mengontrol batas waktu dalam milidetik untuk meng-unmount userdata . Jika perangkat gagal melepas userdata dalam batas waktu yang ditentukan, fallback ke hard reboot akan terpicu.
  • init.userspace_reboot.watchdog.timeoutmillis mengontrol batas waktu agar perangkat berhasil melakukan booting (yaitu, sys.boot_completed=1 ). Jika perangkat gagal melakukan booting dalam batas waktu yang ditentukan, fallback ke hard reboot akan terpicu.

Sesuaikan animasi selama soft restart

Implementasi referensi soft restart mencakup kemampuan untuk menyesuaikan animasi yang ditampilkan selama soft restart.

Di akhir tindakan userspace-reboot-fs-remount , init memulai layanan bootanim . Layanan ini mencari keberadaan file animasi berikut, sesuai urutan, dan memutar file pertama yang ditemukan:

  • /product/media/userspace-reboot.zip
  • /oem/media/userspace-reboot.zip
  • /system/media/userspace-reboot.zip

Jika tidak ada file animasi spesifik soft restart yang ditentukan, bootanim menampilkan animasi android default.

Pengujian

Android 11 menyertakan implementasi referensi soft restart. Selain itu, Anda dapat memverifikasi soft restart menggunakan tes CTS di UserspaceRebootHostTest .