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 meneleponPowerManager.reboot(PowerManager.REBOOT_USERSPACE)Dari shell, menggunakan
adb shell svc power reboot userspaceatauadb 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:
Menerima
sys.powerctl=reboot,userspace.Membuat proses
UserspaceRebootWatchdogThread()terpisah untuk memantau soft restart.Memicu tindakan
userspace-reboot-requested, yang mereset semua properti sistem yang dapat memengaruhi mulai ulang ringan. Properti yang terpengaruh:sys.usb.configsys.usb.statesys.boot_completeddev.bootcompletesys.init.updatable_crashingsys.init.updatable_crashing_process_nameapexd.statussys.user.0.ce_availablesys.shutdown.requestedservice.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-requesteddalamrootdir/init.rc.Menjalankan fungsi
DoUserspaceReboot, yang melakukan tindakan berikut:- Mengirim
SIGTERMke proses yang dimulai setelahuserdatadipasang dan menunggu proses tersebut berhenti. - Setelah waktu tunggu tercapai, kirim
SIGKILLuntuk menghentikan proses yang sedang berjalan. - Panggilan
/system/bin/vdc volume reset. - Melepaskan perangkat pendukung zRAM.
- Melepas paket APEX aktif.
- Beralih kembali ke namespace pemasangan bootstrap.
- Memicu tindakan
userspace-reboot-resume.
- Mengirim
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),userdatadipasang ulang dengan opsicheckpoint=disable.Pembuatan titik pemeriksaan tingkat blok (misalnya,
ext4), lalu/datadilepas dan semua perangkat pemeta perangkat induk yang dipasang di atasnya akan dihancurkan. Selanjutnya,userdatadi-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 resetgagal. - Pelepasan perangkat zRAM gagal.
- Paket APEX aktif dilepas dengan tidak benar.
- Upaya untuk memasang ulang
userdatake 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_supportedmengontrol kapan perangkat dapat melakukan mulai ulang ringan. Jika nilai properti ini adalahfalse,0, atau tidak ditentukan, maka upaya untuk memulai ulang akan ditolak.init.userspace_reboot.sigkill.timeoutmillismengontrol waktu tunggu dalam milidetik untuk proses yang menerima sinyalSIGKILLuntuk berhenti. Jika salah satu proses gagal berhenti dalam waktu tunggu yang diberikan, maka penggantian ke reboot paksa akan dipicu.init.userspace_reboot.sigterm.timeoutmillismengontrol waktu tunggu dalam milidetik untuk proses yang menerima sinyalSIGTERMuntuk dihentikan. Semua proses yang gagal dihentikan dalam waktu tunggu yang diberikan akan menerima sinyalSIGKILL.init.userspace_reboot.started.timeoutmillismengontrol 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.timeoutmillismengontrol waktu tunggu dalam milidetik untuk melepasuserdata. Jika perangkat gagal melepasuserdatadalam waktu tunggu yang diberikan, penggantian ke reboot paksa akan dipicu.init.userspace_reboot.watchdog.timeoutmillismengontrol 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.