Mulai ulang di latar belakang (<= AOSP 14)

Android 11 mendukung mulai ulang ringan, yaitu mulai ulang runtime proses di ruang pengguna yang digunakan untuk menerapkan update yang memerlukan mulai ulang (misalnya, update pada paket APEX). Saat ini, soft restart terbatas pada proses yang dimulai setelah userdata di-mount.

Restart lunak diminta dengan cara berikut:

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

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

Setelah memulai ulang sementara, penyimpanan yang dienkripsi dengan kredensial akan tetap terbuka.

Jika perangkat mendukung mulai ulang ringan, metode API PowerManager.isRebootingUserspace() akan menampilkan true, dan nilai properti sistem init.userspace_reboot.is_supported sama dengan 1.

Jika perangkat tidak mendukung mulai ulang ringan, panggilan ke PowerManager.reboot(PowerManager.REBOOT_USERSPACE), adb reboot userspace, dan adb shell svc power reboot userspace akan gagal.

Eksekusi mulai ulang di latar belakang

Setelah mulai ulang ringan diminta (melalui PowerManager atau dari shell), init melakukan langkah-langkah berikut:

  1. Menerima sys.powerctl=reboot,userspace.

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

  3. Memicu tindakan userspace-reboot-requested, yang mereset semua properti sistem yang dapat memengaruhi mulai ulang ringan. 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 disetel lagi selama urutan booting. Jika perlu, Anda dapat mereset properti tambahan. Untuk contoh, lihat tindakan on userspace-reboot-requested dalam rootdir/init.rc.

  4. Menjalankan fungsi DoUserspaceReboot, yang melakukan tindakan berikut:

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

Jika pembuatan titik pemeriksaan sistem file diminta sebelum mulai ulang ringan, userdata akan dipasang ulang ke mode pembuatan titik pemeriksaan selama tindakan userspace-reboot-fs-remount (lihat bagian berikut untuk mengetahui detailnya). Mulai ulang lunak dipertimbangkan setelah sys.boot_completed property disetel ke 1. Di akhir mulai ulang ringan, layar tetap nonaktif dan interaksi pengguna eksplisit diperlukan untuk mengaktifkannya.

Pembuatan titik pemeriksaan sistem file

Jika checkpoint sistem file diminta sebelum mulai ulang sementara, userdata akan dipasang ulang dalam mode checkpointing selama mulai ulang sementara. Logika pemasangan ulang diimplementasikan dalam fungsi fs_mgr_remount_userdata_into_checkpointing, dan berbeda di antara metode pembuatan titik pemeriksaan. Khususnya, saat userdata mendukung:

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

  • Pembuatan titik pemeriksaan tingkat blok (misalnya, ext4), lalu /data dilepas dan semua perangkat pemeta perangkat induk yang dipasang di atasnya akan dihancurkan. Selanjutnya, userdata di-mount menggunakan jalur kode yang sama dengan yang digunakan saat booting checkpointing normal.

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

Melakukan reboot paksa

Untuk memastikan bahwa mulai ulang ringan tidak membuat perangkat tidak dapat digunakan, Android 11 menyertakan penggantian ke mulai ulang paksa yang dipicu saat salah satu kondisi berikut terpenuhi:

  • Perangkat gagal memulai ulang ringan (yaitu, sys.init.userspace_reboot.in_progress=1) dalam waktu tunggu tertentu.
  • Proses gagal berhenti dalam waktu tunggu tertentu.
  • Operasi /system/bin/vdc volume reset gagal.
  • Pelepasan perangkat zRAM gagal.
  • Paket APEX aktif dilepas dengan tidak benar.
  • Upaya untuk memasang ulang userdata ke mode pembuatan titik pemeriksaan gagal.
  • Perangkat gagal melakukan booting dengan berhasil (yaitu, sys.boot_completed=1) dalam waktu tunggu yang diberikan.

Konfigurasi per perangkat

Beberapa aspek mulai ulang ringan dapat disesuaikan dengan mengubah nilai properti berikut:

  • init.userspace_reboot.is_supported mengontrol kapan perangkat dapat melakukan mulai ulang ringan. Jika nilai properti ini adalah false, 0, atau tidak ditentukan, maka upaya untuk memulai ulang akan ditolak.
  • init.userspace_reboot.sigkill.timeoutmillis mengontrol waktu tunggu dalam milidetik untuk proses yang menerima sinyal SIGKILL untuk berhenti. Jika salah satu proses gagal berhenti dalam waktu tunggu yang diberikan, maka penggantian ke reboot paksa akan dipicu.
  • init.userspace_reboot.sigterm.timeoutmillis mengontrol waktu tunggu dalam milidetik untuk proses yang menerima sinyal SIGTERM untuk dihentikan. Semua proses yang gagal dihentikan dalam waktu tunggu yang diberikan akan menerima sinyal SIGKILL.
  • init.userspace_reboot.started.timeoutmillis mengontrol waktu tunggu dalam milidetik agar mulai ulang di latar belakang dimulai (yaitu, sys.init.userspace_reboot.in_progress=1). Jika perangkat gagal memulai mulai ulang di latar belakang dalam waktu tunggu yang diberikan, penggantian ke mulai ulang paksa akan dipicu.
  • init.userspace_reboot.userdata_remount.timeoutmillis mengontrol waktu tunggu dalam milidetik untuk melepas userdata. Jika perangkat gagal melepas userdata dalam waktu tunggu yang diberikan, penggantian ke reboot paksa akan dipicu.
  • init.userspace_reboot.watchdog.timeoutmillis mengontrol waktu tunggu agar perangkat berhasil melakukan booting (yaitu, sys.boot_completed=1). Jika perangkat gagal melakukan booting dalam waktu tunggu yang diberikan, penggantian ke mulai ulang paksa akan dipicu.

Menyesuaikan animasi selama memulai ulang ringan

Implementasi referensi mulai ulang ringan mencakup kemampuan untuk menyesuaikan animasi yang ditampilkan selama mulai ulang ringan.

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

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

Jika tidak ada file animasi khusus mulai ulang ringan yang ditentukan, bootanim akan menampilkan animasi android default.

Pengujian

Android 11 menyertakan implementasi referensi soft restart. Selain itu, Anda dapat memverifikasi mulai ulang ringan menggunakan pengujian CTS di UserspaceRebootHostTest.