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 memanggilPowerManager.reboot(PowerManager.REBOOT_USERSPACE)Dari shell, menggunakan
adb shell svc power reboot userspaceatauadb 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:
Menerima
sys.powerctl=reboot,userspace.Memotong proses
UserspaceRebootWatchdogThread()terpisah untuk memantau soft restart.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-requesteddirootdir/init.rc.-
Menjalankan fungsi
DoUserspaceReboot, yang melakukan tindakan berikut:- Mengirim
SIGTERMke proses yang dimulai setelahuserdatadipasang dan menunggu mereka berhenti. - Setelah batas waktu tercapai, mengirimkan
SIGKILLuntuk mematikan semua proses yang sedang berjalan. -
/system/bin/vdc volume reset. - Lepas perangkat pendukung zRAM.
- Lepas paket APEX yang aktif.
- Beralih kembali ke namespace mount bootstrap.
- Memicu tindakan
userspace-reboot-resume.
- Mengirim
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),userdatapengguna dipasang ulang dengan opsicheckpoint=disable.Pemeriksaan level blok (misalnya,
ext4), lalu/datadilepas dan semua perangkat pemetaan perangkat induk yang dipasang di atasnya dihancurkan. Selanjutnya,userdatapengguna 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 resetgagal. - Pelepasan perangkat zRAM gagal.
- Paket APEX aktif tidak terpasang dengan benar.
- Upaya untuk memasang
userdatapengguna 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_supportedmengontrol kapan perangkat dapat melakukan soft restart. Jika nilai properti ini adalahfalse,0, atau tidak ditentukan, maka upaya untuk memulai ulang akan ditolak. -
init.userspace_reboot.sigkill.timeoutmillismengontrol batas waktu dalam milidetik untuk menghentikan proses yang menerima sinyalSIGKILL. Jika salah satu proses gagal berhenti dalam batas waktu yang ditentukan, maka mundur ke hard reboot akan dipicu. -
init.userspace_reboot.sigterm.timeoutmillismengontrol batas waktu dalam milidetik untuk proses yang menerima sinyalSIGTERMuntuk dihentikan. Semua proses yang gagal dihentikan dalam batas waktu yang diberikan menerima sinyalSIGKILL. -
init.userspace_reboot.started.timeoutmillismengontrol 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.timeoutmillismengontrol batas waktu dalam milidetik untuk melepasuserdata. Jika perangkat gagal mengeluarkanuserdatapengguna dalam batas waktu yang ditentukan, mundur ke boot ulang paksa dipicu. -
init.userspace_reboot.watchdog.timeoutmillismengontrol 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 .