Android 11 mendukung mulai ulang soft, yaitu
memulai ulang proses runtime di ruang pengguna yang digunakan untuk menerapkan update yang
memerlukan mulai ulang (misalnya, update pada paket APEX). Saat ini, mulai ulang
soft terbatas pada proses yang dimulai setelah userdata
dipasang.
Soft restart 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 memulai ulang secara soft, penyimpanan yang dienkripsi dengan kredensial tetap tidak terkunci.
Jika perangkat mendukung soft restart, metode
PowerManager.isRebootingUserspace()
API akan menampilkan true
, dan nilai
properti sistem init.userspace_reboot.is_supported
sama dengan 1
.
Jika perangkat tidak mendukung mulai ulang soft, panggilan ke
PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
, adb reboot
userspace
, dan adb shell svc power reboot userspace
akan gagal.
Eksekusi mulai ulang soft
Setelah soft restart diminta (melalui PowerManager
atau dari shell),
init
akan melakukan langkah-langkah berikut:
Menerima
sys.powerctl=reboot,userspace
.Memisahkan proses
UserspaceRebootWatchdogThread()
terpisah untuk memantau soft restart.Memicu tindakan
userspace-reboot-requested
, yang mereset 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 ditetapkan lagi selama urutan booting. Jika perlu, Anda dapat mereset 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 proses tersebut berhenti. - Setelah waktu tunggu tercapai, kirim
SIGKILL
untuk menghentikan proses yang sedang berjalan. - Memanggil
/system/bin/vdc volume reset
. - Melepaskan perangkat pendukung zRAM.
- Melepas paket APEX yang aktif.
- Beralih kembali ke namespace pemasangan bootstrap.
- Memicu tindakan
userspace-reboot-resume
.
- Mengirim
Jika checkpoint sistem file diminta sebelum soft restart, userdata
akan dipasang kembali ke mode checkpoint selama tindakan userspace-reboot-fs-remount
(lihat bagian berikut untuk mengetahui detailnya). Soft restart dipertimbangkan setelah sys.boot_completed property
ditetapkan ke 1
. Di akhir soft restart, layar tetap nonaktif dan
interaksi pengguna eksplisit diperlukan untuk mengaktifkannya.
Pemeriksaan titik kontrol sistem file
Jika pemeriksaan titik sistem file diminta sebelum mulai ulang halus,
userdata
akan dipasang ulang dalam mode pemeriksaan titik selama mulai ulang halus.
Logika pemasangan ulang diterapkan dalam
fungsi
fs_mgr_remount_userdata_into_checkpointing
, dan berbeda antara metode pemeriksaan titik henti sementara. Secara khusus, saat
userdata
mendukung:
Pemeriksaan titik kontrol tingkat sistem file (misalnya,
f2fs
),userdata
dipasang ulang dengan opsicheckpoint=disable
.Checkpointing tingkat blok (misalnya,
ext4
),/data
akan dilepas dan semua perangkat mapper perangkat induk yang dipasang di atasnya akan dihancurkan. Selanjutnya,userdata
dipasang menggunakan jalur kode yang sama seperti yang digunakan dalam booting checkpointing normal.
Jika ring kunci tingkat sistem file digunakan untuk mengelola kunci yang dienkripsi kredensial (CE) dan
kunci yang dienkripsi perangkat (DE), kunci akan hilang setelah userdata
dilepas. Untuk
mengizinkan pemulihan kunci, saat menginstal kunci ke ring kunci sistem file, vold
juga menginstal kunci yang sama dari jenis fscrypt-provisioning
ke ring kunci
tingkat sesi. Saat init_user0
dipanggil, vold
akan menginstal ulang kunci di ring kunci sistem
file.
Fallback ke mulai ulang paksa
Untuk memastikan bahwa mulai ulang soft tidak membuat perangkat dalam status yang tidak dapat digunakan, Android 11 menyertakan penggantian ke mulai ulang hard yang dipicu saat salah satu kondisi berikut terpenuhi:
- Perangkat gagal memulai soft restart (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. - Penghentian pemasangan perangkat zRAM gagal.
- Paket APEX aktif tidak dilepas dengan benar.
- Upaya untuk memasang ulang
userdata
ke mode pemeriksaan titik henti sementara gagal. - Perangkat gagal melakukan booting (yaitu,
sys.boot_completed=1
) dalam waktu tunggu 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 memulai ulang di latar belakang. Jika nilai properti ini adalahfalse
,0
, atau tidak ditentukan, 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 ditentukan, penggantian ke mulai ulang keras 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 ditentukan akan menerima sinyalSIGKILL
.init.userspace_reboot.started.timeoutmillis
mengontrol waktu tunggu dalam milidetik untuk memulai mulai ulang di latar belakang (yaitu,sys.init.userspace_reboot.in_progress=1
). Jika perangkat gagal memulai mulai ulang di latar belakang dalam waktu tunggu yang ditentukan, 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 ditentukan, 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 ditentukan, penggantian ke hard reboot akan dipicu.
Menyesuaikan 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, dalam urutan yang tercantum, 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 tertentu yang dimulai ulang dengan soft restart yang ditentukan, bootanim
akan menampilkan
animasi android
default.
Pengujian
Android 11 menyertakan implementasi referensi
mulai ulang di latar belakang. Selain itu, Anda dapat memverifikasi soft restart menggunakan
pengujian CTS di
UserspaceRebootHostTest
.