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 userspace
atauadb 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.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 disetel lagi selama urutan booting. Jika perlu, Anda dapat mereset properti tambahan. Untuk contoh, lihat tindakan
on userspace-reboot-requested
dalamrootdir/init.rc
.Menjalankan fungsi
DoUserspaceReboot
, yang melakukan tindakan berikut:- Mengirim
SIGTERM
ke proses yang dimulai setelahuserdata
dipasang dan menunggu proses tersebut berhenti. - Setelah waktu tunggu tercapai, kirim
SIGKILL
untuk 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
),userdata
dipasang ulang dengan opsicheckpoint=disable
.Pembuatan titik pemeriksaan tingkat blok (misalnya,
ext4
), lalu/data
dilepas dan semua perangkat pemeta perangkat induk yang dipasang di atasnya akan dihancurkan. Selanjutnya,userdata
di-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 reset
gagal. - Pelepasan perangkat zRAM gagal.
- Paket APEX aktif dilepas dengan tidak benar.
- Upaya untuk memasang ulang
userdata
ke 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_supported
mengontrol 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.timeoutmillis
mengontrol waktu tunggu dalam milidetik untuk proses yang menerima sinyalSIGKILL
untuk berhenti. Jika salah satu proses gagal berhenti dalam waktu tunggu yang diberikan, maka penggantian ke reboot paksa akan dipicu.init.userspace_reboot.sigterm.timeoutmillis
mengontrol waktu tunggu dalam milidetik untuk proses yang menerima sinyalSIGTERM
untuk dihentikan. Semua proses yang gagal dihentikan dalam waktu tunggu yang diberikan akan menerima sinyalSIGKILL
.init.userspace_reboot.started.timeoutmillis
mengontrol 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.timeoutmillis
mengontrol waktu tunggu dalam milidetik untuk melepasuserdata
. Jika perangkat gagal melepasuserdata
dalam waktu tunggu yang diberikan, 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 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
.