Mulai ulang lunak (<= AOSP 14)

Android 11 mendukung mulai ulang soft, yaitu memulai ulang proses runtime di ruang pengguna yang digunakan untuk menerapkan update yang memerlukan mulai ulang (misalnya, update pada paket APEX). Saat ini, mulai ulang soft 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, menggunakan adb shell svc power reboot userspace atau adb reboot userspace

Setelah memulai ulang secara soft, penyimpanan yang dienkripsi dengan kredensial tetap tidak terkunci.

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

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

Eksekusi mulai ulang soft

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

  1. Menerima sys.powerctl=reboot,userspace.

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

  3. Memicu tindakan userspace-reboot-requested, yang mereset 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 ditetapkan lagi selama urutan booting. Jika perlu, Anda dapat mereset 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 proses tersebut berhenti.
    2. Setelah waktu tunggu tercapai, kirim SIGKILL untuk menghentikan proses yang sedang berjalan.
    3. Memanggil /system/bin/vdc volume reset.
    4. Melepaskan perangkat pendukung zRAM.
    5. Melepas paket APEX yang aktif.
    6. Beralih kembali ke namespace pemasangan bootstrap.
    7. Memicu tindakan userspace-reboot-resume.

Jika checkpoint sistem file diminta sebelum soft restart, userdata akan dipasang kembali ke mode checkpoint selama tindakan userspace-reboot-fs-remount (lihat bagian berikut untuk mengetahui detailnya). Soft restart dipertimbangkan setelah sys.boot_completed property ditetapkan ke 1. Di akhir soft restart, layar tetap nonaktif dan interaksi pengguna eksplisit diperlukan untuk mengaktifkannya.

Pemeriksaan titik kontrol sistem file

Jika pemeriksaan titik sistem file diminta sebelum mulai ulang halus, userdata akan dipasang ulang dalam mode pemeriksaan titik selama mulai ulang halus. Logika pemasangan ulang diterapkan dalam fungsi fs_mgr_remount_userdata_into_checkpointing, dan berbeda antara metode pemeriksaan titik henti sementara. Secara khusus, saat userdata mendukung:

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

  • Checkpointing tingkat blok (misalnya, ext4), /data akan dilepas dan semua perangkat mapper perangkat induk yang dipasang di atasnya akan dihancurkan. Selanjutnya, userdata dipasang menggunakan jalur kode yang sama seperti yang digunakan dalam booting checkpointing normal.

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

Fallback ke mulai ulang paksa

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

  • Perangkat gagal memulai soft restart (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.
  • Penghentian pemasangan perangkat zRAM gagal.
  • Paket APEX aktif tidak dilepas dengan benar.
  • Upaya untuk memasang ulang userdata ke mode pemeriksaan titik henti sementara gagal.
  • Perangkat gagal melakukan booting (yaitu, sys.boot_completed=1) dalam waktu tunggu 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 memulai ulang di latar belakang. Jika nilai properti ini adalah false, 0, atau tidak ditentukan, 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 ditentukan, penggantian ke mulai ulang keras 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 ditentukan akan menerima sinyal SIGKILL.
  • init.userspace_reboot.started.timeoutmillis mengontrol waktu tunggu dalam milidetik untuk memulai mulai ulang di latar belakang (yaitu, sys.init.userspace_reboot.in_progress=1). Jika perangkat gagal memulai mulai ulang di latar belakang dalam waktu tunggu yang ditentukan, 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 ditentukan, 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 ditentukan, penggantian ke hard reboot akan dipicu.

Menyesuaikan 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, dalam urutan yang tercantum, dan memutar file pertama yang ditemukan:

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

Jika tidak ada file animasi tertentu yang dimulai ulang dengan soft restart yang ditentukan, bootanim akan menampilkan animasi android default.

Pengujian

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