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 userspace
atauadb 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-requested
dirootdir/init.rc
.-
Menjalankan fungsi
DoUserspaceReboot
, yang melakukan tindakan berikut:- Mengirim
SIGTERM
ke proses yang dimulai setelahuserdata
dipasang dan menunggu mereka berhenti. - Setelah batas waktu tercapai, mengirimkan
SIGKILL
untuk 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
),userdata
pengguna dipasang ulang dengan opsicheckpoint=disable
.Pemeriksaan level blok (misalnya,
ext4
), lalu/data
dilepas dan semua perangkat pemetaan perangkat induk yang dipasang di atasnya dihancurkan. Selanjutnya,userdata
pengguna 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 reset
gagal. - Pelepasan perangkat zRAM gagal.
- Paket APEX aktif tidak terpasang dengan benar.
- Upaya untuk memasang
userdata
pengguna 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_supported
mengontrol 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.timeoutmillis
mengontrol 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.timeoutmillis
mengontrol batas waktu dalam milidetik untuk proses yang menerima sinyalSIGTERM
untuk dihentikan. Semua proses yang gagal dihentikan dalam batas waktu yang diberikan menerima sinyalSIGKILL
. -
init.userspace_reboot.started.timeoutmillis
mengontrol 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.timeoutmillis
mengontrol batas waktu dalam milidetik untuk melepasuserdata
. Jika perangkat gagal mengeluarkanuserdata
pengguna dalam batas waktu yang ditentukan, mundur ke boot ulang paksa dipicu. -
init.userspace_reboot.watchdog.timeoutmillis
mengontrol 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
.