Soft Restart

Android 11 mendukung mulai ulang lunak, yang merupakan mulai ulang waktu proses dari proses di ruang pengguna yang digunakan untuk menerapkan pembaruan yang memerlukan boot ulang (misalnya, pembaruan untuk paket APEX). Saat ini, soft restart terbatas pada proses yang dimulai setelah userdata dipasang.

Restart lunak diminta dengan cara berikut:

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

  • Dari shell, menggunakan 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 PowerManager.isRebootingUserspace() API mengembalikan true , dan nilai properti sistem init.userspace_reboot.is_supported sama dengan 1 .

Jika perangkat tidak mendukung soft restart, maka 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. Memotong proses UserspaceRebootWatchdogThread() terpisah untuk memantau soft restart.

  3. Memicu tindakan yang 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 perlu, Anda dapat mengatur ulang properti tambahan. Sebagai contoh, 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 mereka berhenti.
    2. Setelah batas waktu tercapai, mengirimkan SIGKILL untuk mematikan semua proses yang sedang berjalan.
    3. /system/bin/vdc volume reset .
    4. Lepas perangkat pendukung zRAM.
    5. Lepas paket APEX yang aktif.
    6. Beralih kembali ke namespace mount bootstrap.
    7. Memicu tindakan userspace-reboot-resume .

Jika pemeriksaan sistem file diminta sebelum soft restart, data pengguna di- userdata ke mode pemeriksaan selama tindakan userspace-reboot-fs-remount (lihat bagian berikut untuk detailnya). Restart lunak dipertimbangkan setelah sys.boot_completed property disetel ke 1 . Di akhir soft restart, tampilan dimatikan dan interaksi pengguna secara eksplisit diperlukan untuk membangunkannya.

Pos pemeriksaan sistem file

Jika pos pemeriksaan sistem file diminta sebelum soft restart, data pengguna di- userdata dalam mode checkpointing selama soft restart. Logika remount diimplementasikan dalam fungsi fs_mgr_remount_userdata_into_checkpointing , dan berbeda di antara metode checkpointing. Khususnya, ketika userdata mendukung:

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

  • Pemeriksaan level blok (misalnya, ext4 ), lalu /data dilepas dan semua perangkat pemetaan perangkat induk yang dipasang di atasnya dihancurkan. Selanjutnya, userdata pengguna dipasang menggunakan jalur kode yang sama seperti yang digunakan pada boot pos pemeriksaan normal.

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

Kembali ke hard reboot

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

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

Konfigurasi per perangkat

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

  • init.userspace_reboot.is_supported mengontrol kapan perangkat dapat melakukan soft restart. Jika nilai properti ini adalah false , 0 , atau tidak ditentukan, maka upaya untuk memulai ulang akan ditolak.
  • init.userspace_reboot.sigkill.timeoutmillis mengontrol batas waktu dalam milidetik untuk menghentikan proses yang menerima sinyal SIGKILL . Jika salah satu proses gagal berhenti dalam batas waktu yang ditentukan, maka mundur ke hard reboot akan dipicu.
  • init.userspace_reboot.sigterm.timeoutmillis mengontrol batas waktu dalam milidetik untuk proses yang menerima sinyal SIGTERM untuk dihentikan. 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 ulang lunak (yaitu, sys.init.userspace_reboot.in_progress=1 ). Jika perangkat gagal memulai soft restart dalam batas waktu yang diberikan, mundur ke hard reboot akan dipicu.
  • init.userspace_reboot.userdata_remount.timeoutmillis mengontrol batas waktu dalam milidetik untuk melepas userdata . Jika perangkat gagal mengeluarkan userdata pengguna dalam batas waktu yang ditentukan, mundur ke boot ulang paksa dipicu.
  • init.userspace_reboot.watchdog.timeoutmillis mengontrol batas waktu agar perangkat berhasil boot (yaitu, sys.boot_completed=1 ). Jika perangkat gagal melakukan booting dalam batas waktu yang ditentukan, mundur ke hard reboot akan dipicu.

Menyesuaikan animasi selama soft restart

Implementasi referensi dari 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, dalam urutan yang tercantum, dan memutar yang pertama ditemukan:

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

Jika tidak ada file animasi khusus restart lunak 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 .