Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mulai Ulang Lunak

Android 11 mendukung soft restart, yang merupakan proses restart runtime di ruang pengguna yang digunakan untuk menerapkan update yang memerlukan reboot (misalnya, update ke paket APEX). Saat ini, me-restart lembut terbatas pada proses yang dimulai setelah userdata telah dipasang.

Mulai ulang lunak diminta dengan cara berikut:

  • Dari PowerManager , dengan memanggil PowerManager.reboot(PowerManager.REBOOT_USERSPACE)

  • Dari shell, menggunakan adb shell svc power reboot userspace atau adb reboot userspace

Setelah memulai ulang lunak, penyimpanan yang dienkripsi dengan kredensial tetap tidak terkunci.

Jika perangkat mendukung mulai ulang lunak, metode API PowerManager.isRebootingUserspace() mengembalikan nilai 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 reboot userspace adb shell svc power reboot userspace gagal.

Eksekusi mulai ulang lunak

Setelah soft restart diminta (melalui PowerManager atau dari shell), init melakukan langkah-langkah berikut:

  1. Terima sys.powerctl=reboot,userspace .

  2. UserspaceRebootWatchdogThread() proses UserspaceRebootWatchdogThread() terpisah untuk memantau soft restart.

  3. Memicu tindakan yang userspace-reboot-requested ruang userspace-reboot-requested , yang menyetel ulang semua properti sistem yang mungkin memengaruhi mulai ulang lunak. 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 mengatur ulang properti tambahan. Sebagai contoh, lihat tindakan yang on userspace-reboot-requested di rootdir/init.rc

  4. Menjalankan fungsi DoUserspaceReboot , yang melakukan tindakan berikut:

    1. Mengirim SIGTERM ke proses dimulai setelah userdata telah dipasang dan menunggu mereka untuk berhenti.
    2. Setelah batas waktu tercapai, kirim SIGKILL untuk menghentikan semua proses yang sedang berjalan.
    3. Panggilan /system/bin/vdc volume reset .
    4. Lepaskan perangkat pendukung zRAM.
    5. Lepaskan paket APEX yang aktif.
    6. Beralih kembali ke namespace mount bootstrap.
    7. Memicu tindakan userspace-reboot-resume .

Jika sistem file checkpointing diminta sebelum restart lembut, userdata remounted ke mode checkpointing selama userspace-reboot-fs-remount tindakan (lihat bagian berikut untuk detail). sys.boot_completed property ulang lunak dipertimbangkan setelah sys.boot_completed property disetel ke 1 . Di akhir soft restart, tampilan akan dimatikan dan interaksi pengguna yang eksplisit diperlukan untuk membangunkannya.

Pos pemeriksaan sistem file

Jika sistem file pos pemeriksaan diminta sebelum restart lembut, userdata remounted dalam mode checkpointing selama restart lembut. Logika remounting diimplementasikan dalam fungsi fs_mgr_remount_userdata_into_checkpointing , dan berbeda di antara metode checkpointing. Secara khusus, ketika userdata mendukung:

  • Filesystem tingkat checkpointing (misalnya, f2fs ), userdata remounted dengan checkpoint=disable pilihan.

  • Titik pemeriksaan level blok (misalnya, ext4 ), kemudian /data dilepas dan semua perangkat pemeta perangkat induk yang dipasang di atasnya akan dimusnahkan. Selanjutnya, userdata dipasang menggunakan jalur kode yang sama seperti yang digunakan dalam booting normal checkpointing.

Jika keyring level sistem file digunakan untuk mengelola kunci credential-encrypted (CE) dan device-encrypted (DE), maka kunci akan hilang setelah userdata dilepas. Untuk mengizinkan pemulihan kunci, saat menginstal kunci ke keyring sistem file, vold juga menginstal kunci yang sama dengan tipe fscrypt-provisioning ke keyring tingkat sesi. Saat init_user0 dipanggil, vold menginstal ulang kunci di keyring sistem file.

Mundur ke boot ulang paksa

Untuk memastikan bahwa soft restart tidak membuat perangkat dalam keadaan tidak dapat digunakan, Android 11 menyertakan fallback ke hard reboot yang dipicu ketika salah satu kondisi berikut terpenuhi:

  • Perangkat gagal memulai mulai ulang lunak (yaitu, sys.init.userspace_reboot.in_progress=1 ) dalam batas waktu tertentu.
  • Sebuah proses gagal berhenti dalam waktu tunggu tertentu.
  • Operasi /system/bin/vdc volume reset gagal.
  • Pelepasan perangkat zRAM gagal.
  • Paket APEX aktif tidak terpasang dengan benar.
  • Upaya untuk remount userdata ke mode checkpointing gagal.
  • Perangkat gagal melakukan booting (yaitu, sys.boot_completed=1 ) dalam waktu tunggu tertentu.

Konfigurasi per perangkat

Beberapa aspek mulai ulang lunak dapat disetel dengan mengubah nilai properti berikut:

  • init.userspace_reboot.is_supported mengontrol kapan perangkat dapat melakukan soft restart. Jika nilai properti ini false , 0 , atau tidak ditentukan, maka upaya untuk memulai ulang ditolak.
  • init.userspace_reboot.sigkill.timeoutmillis mengontrol batas waktu dalam milidetik untuk proses yang menerima sinyal SIGKILL untuk berhenti. Jika salah satu proses gagal berhenti dalam waktu tunggu yang ditentukan, maka fallback ke hard reboot akan dipicu.
  • init.userspace_reboot.sigterm.timeoutmillis mengontrol batas waktu dalam milidetik untuk proses yang menerima sinyal SIGTERM untuk dihentikan. Semua proses yang gagal dihentikan dalam batas waktu tertentu menerima sinyal SIGKILL .
  • init.userspace_reboot.started.timeoutmillis mengontrol batas waktu dalam milidetik untuk mulai ulang lunak (yaitu, sys.init.userspace_reboot.in_progress=1 ). Jika perangkat gagal memulai mulai ulang lunak dalam waktu tunggu yang ditentukan, penggantian ke boot ulang keras akan dipicu.
  • init.userspace_reboot.userdata_remount.timeoutmillis kontrol batas waktu dalam milidetik untuk melepas userdata . Jika perangkat gagal unmout userdata dalam batas waktu yang diberikan, fallback untuk reboot keras dipicu.
  • init.userspace_reboot.watchdog.timeoutmillis mengontrol waktu tunggu perangkat agar berhasil boot (yaitu, sys.boot_completed=1 ). Jika perangkat gagal melakukan booting dalam waktu tunggu yang ditentukan, fallback 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 terdaftar, 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 mulai ulang lunak yang ditentukan, bootanim menampilkan animasi android default.

Menguji

Android 11 menyertakan implementasi referensi untuk mulai ulang lunak. Selain itu, Anda dapat memverifikasi soft restart menggunakan tes CTS di UserspaceRebootHostTest .