Android 11 mendukung soft restart, yang merupakan proses restart runtime di ruang pengguna yang digunakan untuk menerapkan pembaruan yang memerlukan reboot (misalnya, pembaruan pada paket APEX). Saat ini, soft restart terbatas pada proses yang dimulai setelah userdata
dipasang.
Soft restart diminta dengan cara berikut:
Dari
PowerManager
, dengan memanggilPowerManager.reboot(PowerManager.REBOOT_USERSPACE)
Dari shell, gunakan
adb shell svc power reboot userspace
atauadb reboot userspace
Setelah soft restart, penyimpanan terenkripsi kredensial tetap tidak terkunci.
Jika perangkat mendukung soft restart, maka metode API PowerManager.isRebootingUserspace()
akan mengembalikan true
, dan nilai properti sistem init.userspace_reboot.is_supported
sama dengan 1
.
Jika perangkat tidak mendukung soft restart, 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
.Membagi proses
UserspaceRebootWatchdogThread()
terpisah untuk memantau soft restart.Memicu tindakan
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 diperlukan, Anda dapat mengatur ulang properti tambahan. Misalnya, lihat tindakan
on userspace-reboot-requested
dirootdir/init.rc
.-
Menjalankan fungsi
DoUserspaceReboot
, yang melakukan tindakan berikut:- Mengirim
SIGTERM
ke proses yang dimulai setelahuserdata
dipasang dan menunggu hingga proses berhenti. - Setelah batas waktu tercapai, kirim
SIGKILL
untuk mematikan proses yang sedang berjalan. - Panggilan
/system/bin/vdc volume reset
. - Melepaskan perangkat pendukung zRAM.
- Melepaskan paket APEX yang aktif.
- Beralih kembali ke namespace pemasangan bootstrap.
- Memicu tindakan
userspace-reboot-resume
.
- Mengirim
Jika pos pemeriksaan sistem file diminta sebelum soft restart, userdata
akan dipasang ulang ke mode pos pemeriksaan selama tindakan userspace-reboot-fs-remount
(lihat bagian berikut untuk detailnya). Restart lunak dipertimbangkan setelah sys.boot_completed property
diatur ke 1
. Di akhir soft restart, tampilan tetap mati dan interaksi pengguna yang eksplisit diperlukan untuk membangunkannya.
Pos pemeriksaan sistem file
Jika pos pemeriksaan sistem file diminta sebelum soft restart, userdata
akan dipasang ulang dalam mode checkpointing selama soft restart. Logika pemasangan ulang diimplementasikan dalam fungsi fs_mgr_remount_userdata_into_checkpointing
, dan berbeda antar metode pos pemeriksaan. Khususnya, ketika userdata
mendukung:
Pos pemeriksaan tingkat sistem file (misalnya,
f2fs
),userdata
dipasang ulang dengan opsicheckpoint=disable
.Pos pemeriksaan tingkat blok (misalnya,
ext4
), lalu/data
dilepas dan semua perangkat pembuat peta perangkat induk yang dipasang di atasnya akan dimusnahkan. Selanjutnya,userdata
dipasang menggunakan jalur kode yang sama seperti yang digunakan pada boot pos pemeriksaan normal.
Jika keyring tingkat sistem file digunakan untuk mengelola kunci terenkripsi kredensial (CE) dan terenkripsi perangkat (DE), maka kunci akan hilang setelah userdata
dilepas. Untuk memungkinkan pemulihan kunci, saat memasang kunci ke keyring sistem file, vold
juga menginstal kunci yang sama dengan jenis fscrypt-provisioning
ke keyring tingkat sesi. Ketika init_user0
dipanggil, vold
menginstal ulang kunci di keyring sistem file.
Penggantian ke reboot keras
Untuk memastikan bahwa soft restart tidak membuat perangkat berada dalam kondisi tidak dapat digunakan, Android 11 menyertakan fallback ke hard reboot yang dipicu ketika salah satu kondisi berikut terpenuhi:
- Perangkat gagal memulai soft restart (yaitu,
sys.init.userspace_reboot.in_progress=1
) dalam batas waktu tertentu. - Suatu proses gagal berhenti dalam batas waktu tertentu.
- Operasi
/system/bin/vdc volume reset
gagal. - Pelepasan perangkat zRAM gagal.
- Paket APEX yang aktif tidak dipasang dengan benar.
- Upaya untuk memasang kembali
userdata
ke mode pos pemeriksaan gagal. - Perangkat gagal melakukan booting (yaitu,
sys.boot_completed=1
) dalam batas waktu 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 soft restart. Jika nilai properti inifalse
,0
, atau tidak ditentukan, maka upaya untuk memulai ulang akan ditolak. -
init.userspace_reboot.sigkill.timeoutmillis
mengontrol batas waktu dalam milidetik agar proses yang menerima sinyalSIGKILL
berhenti. Jika salah satu proses gagal dihentikan dalam batas waktu yang ditentukan, maka fallback ke hard reboot akan terpicu. -
init.userspace_reboot.sigterm.timeoutmillis
mengontrol batas waktu dalam milidetik untuk menghentikan proses yang menerima sinyalSIGTERM
. Semua proses yang gagal dihentikan dalam batas waktu yang diberikan menerima sinyalSIGKILL
. -
init.userspace_reboot.started.timeoutmillis
mengontrol batas waktu dalam milidetik untuk memulai soft restart (yaitu,sys.init.userspace_reboot.in_progress=1
). Jika perangkat gagal memulai soft restart dalam batas waktu yang ditentukan, fallback ke hard reboot akan terpicu. -
init.userspace_reboot.userdata_remount.timeoutmillis
mengontrol batas waktu dalam milidetik untuk meng-unmountuserdata
. Jika perangkat gagal melepasuserdata
dalam batas waktu yang ditentukan, fallback ke hard reboot akan terpicu. -
init.userspace_reboot.watchdog.timeoutmillis
mengontrol batas waktu agar perangkat berhasil melakukan booting (yaitu,sys.boot_completed=1
). Jika perangkat gagal melakukan booting dalam batas waktu yang ditentukan, fallback ke hard reboot akan terpicu.
Sesuaikan 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, sesuai urutan, dan memutar file pertama yang ditemukan:
-
/product/media/userspace-reboot.zip
-
/oem/media/userspace-reboot.zip
-
/system/media/userspace-reboot.zip
Jika tidak ada file animasi spesifik soft restart 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
.