Android 11 unterstützt Soft-Neustarts. Das sind Laufzeit-Neustarts von Prozessen im Nutzerbereich, die zum Anwenden von Updates verwendet werden, für die ein Neustart erforderlich ist, z. B. Updates für APEX-Pakete. Derzeit ist der Soft-Neustart auf Prozesse beschränkt, die nach dem Mounten von userdata gestartet wurden.
Ein Soft-Restart kann auf folgende Weise angefordert werden:
- Ab - PowerManagerunter- PowerManager.reboot(PowerManager.REBOOT_USERSPACE)
- Über die Shell mit - adb shell svc power reboot userspaceoder- adb reboot userspace
Nach einem Soft-Restart bleibt der mit Anmeldedaten verschlüsselte Speicher entsperrt.
Wenn ein Gerät Soft-Neustarts unterstützt, gibt die API-Methode PowerManager.isRebootingUserspace() den Wert true zurück und der Wert der Systemeigenschaft init.userspace_reboot.is_supported ist gleich 1.
Wenn das Gerät keine Soft-Neustarts unterstützt, schlagen Aufrufe von PowerManager.reboot(PowerManager.REBOOT_USERSPACE), adb reboot
userspace und adb shell svc power reboot userspace fehl.
Neustart im Hintergrund ausführen
Nachdem ein Soft-Neustart angefordert wurde (über PowerManager oder über eine Shell), führt init die folgenden Schritte aus:
- Empfängt - sys.powerctl=reboot,userspace.
- Forks einen separaten - UserspaceRebootWatchdogThread()-Prozess, um den Soft-Restart zu überwachen.
- Löst eine - userspace-reboot-requested-Aktion aus, die alle Systemeigenschaften zurücksetzt, die sich auf den Soft-Neustart auswirken könnten. Betroffene Unterkünfte:- 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
 - Die oben genannten Attribute sollten während der Bootsequenz noch einmal festgelegt werden. Bei Bedarf können Sie zusätzliche Properties zurücksetzen. Beispiele finden Sie in der Aktion - on userspace-reboot-requestedin- rootdir/init.rc.
- Führt die Funktion - DoUserspaceRebootaus, die die folgenden Aktionen ausführt:- Sendet SIGTERMan Prozesse, die nach dem Mounten vonuserdatagestartet wurden, und wartet, bis sie beendet werden.
- Nach Ablauf des Zeitlimits wird SIGKILLgesendet, um alle laufenden Prozesse zu beenden.
- Ruft /system/bin/vdc volume resetan.
- Hebt die Bereitstellung des zRAM-Sicherungsgeräts auf.
- Aktive APEX-Pakete werden unmountet.
- Wechselt zurück zum Bootstrap-Bereitstellungs-Namespace.
- Löst die Aktion userspace-reboot-resumeaus.
 
- Sendet 
Wenn vor dem Soft-Restart ein Dateisystem-Checkpointing angefordert wurde, wird userdata während der userspace-reboot-fs-remount-Aktion im Checkpointing-Modus neu gemountet (siehe Details im nächsten Abschnitt). Ein Soft-Restart wird ausgeführt, nachdem sys.boot_completed property auf 1 gesetzt wurde. Am Ende des Soft-Neustarts bleibt das Display aus und es ist eine explizite Nutzerinteraktion erforderlich, um es zu aktivieren.
Dateisystem-Checkpointing
Wenn vor dem Soft-Restart ein Dateisystem-Checkpoint angefordert wurde, wird userdata während des Soft-Restarts im Checkpointing-Modus neu bereitgestellt.
Die Logik für das erneute Mounten ist in der Funktion fs_mgr_remount_userdata_into_checkpointing implementiert und unterscheidet sich je nach Checkpointing-Methode. Insbesondere wenn userdata Folgendes unterstützt:
- Checkpointing auf Dateisystemebene (z. B. - f2fs):- userdatawird mit der Option- checkpoint=disableneu gemountet.
- Block-Level-Checkpointing (z. B. - ext4), dann wird- /dataunmounted und alle übergeordneten Device Mapper-Geräte, auf denen es gemountet war, werden zerstört. Als Nächstes wird- userdatamit demselben Codepfad eingebunden, der auch beim normalen Checkpointing-Bootvorgang verwendet wird.
Wenn ein Schlüsselbund auf Dateisystemebene zum Verwalten von credential-encrypted (CE) und device-encrypted (DE) keys verwendet wird, gehen die Schlüssel nach dem Unmounten von userdata verloren. Damit Schlüssel wiederhergestellt werden können, wird beim Installieren eines Schlüssels in einem Dateisystem-Schlüsselbund mit vold auch derselbe Schlüssel vom Typ fscrypt-provisioning im Schlüsselbund auf Sitzungsebene installiert. Wenn init_user0 aufgerufen wird, werden die Schlüssel von vold im Dateisystem-Schlüsselbund neu installiert.
Fallback auf Neustart erzwingen
Damit ein Gerät nach einem Soft-Neustart nicht in einem nicht nutzbaren Zustand verbleibt, enthält Android 11 einen Fallback zum Hard-Neustart, der ausgelöst wird, wenn eine der folgenden Bedingungen erfüllt ist:
- Ein Gerät kann den Soft-Neustart (sys.init.userspace_reboot.in_progress=1) innerhalb eines bestimmten Zeitlimits nicht starten.
- Ein Prozess kann innerhalb eines bestimmten Zeitlimits nicht beendet werden.
- Der Vorgang /system/bin/vdc volume resetschlägt fehl.
- Das Unmounten des zRAM-Geräts schlägt fehl.
- Ein aktives APEX-Paket wird fälschlicherweise demounted.
- Der Versuch, userdataim Checkpointing-Modus neu zu mounten, schlägt fehl.
- Ein Gerät kann innerhalb eines bestimmten Zeitlimits nicht ordnungsgemäß gestartet werden (d. h. sys.boot_completed=1).
Konfiguration pro Gerät
Einige Aspekte des Soft-Neustarts können durch Ändern der Werte der folgenden Eigenschaften angepasst werden:
- Mit init.userspace_reboot.is_supportedwird gesteuert, wann ein Gerät einen Soft-Neustart durchführen kann. Wenn der Wert dieses Attributsfalse,0oder nicht angegeben ist, werden Neustartversuche abgelehnt.
- init.userspace_reboot.sigkill.timeoutmillissteuert das Zeitlimit in Millisekunden für Prozesse, die ein- SIGKILL-Signal zum Beenden erhalten haben. Wenn einer der Prozesse innerhalb des angegebenen Zeitlimits nicht beendet wird, wird ein Fallback auf einen Hard-Reboot ausgelöst.
- Mit init.userspace_reboot.sigterm.timeoutmilliswird das Zeitlimit in Millisekunden für Prozesse festgelegt, die einSIGTERM-Signal zum Beenden erhalten haben. Alle Prozesse, die im angegebenen Zeitlimit nicht beendet werden konnten, erhalten einSIGKILL-Signal.
- init.userspace_reboot.started.timeoutmillissteuert das Zeitlimit in Millisekunden für den Start des Soft-Neustarts (d. h.- sys.init.userspace_reboot.in_progress=1). Wenn ein Gerät den Soft-Neustart nicht innerhalb des angegebenen Zeitlimits startet, wird ein Fallback zum Hard-Neustart ausgelöst.
- init.userspace_reboot.userdata_remount.timeoutmillissteuert das Zeitlimit in Millisekunden für das Unmounten von- userdata. Wenn das Unmounten von- userdataauf einem Gerät innerhalb des angegebenen Zeitlimits fehlschlägt, wird ein Fallback zum Hard-Reboot ausgelöst.
- init.userspace_reboot.watchdog.timeoutmillissteuert das Zeitlimit für das erfolgreiche Booten eines Geräts (d. h.- sys.boot_completed=1). Wenn ein Gerät innerhalb des angegebenen Zeitlimits nicht booten kann, wird ein Fallback auf einen Hard-Reboot ausgelöst.
Animation während des Soft-Neustarts anpassen
Die Referenzimplementierung eines Soft-Neustarts bietet die Möglichkeit, die während des Soft-Neustarts angezeigte Animation anzupassen.
Am Ende der userspace-reboot-fs-remount-Aktion startet init den bootanim-Dienst. Der Dienst sucht in der aufgeführten Reihenfolge nach den folgenden Animationsdateien und spielt die erste gefundene Datei ab:
- /product/media/userspace-reboot.zip
- /oem/media/userspace-reboot.zip
- /system/media/userspace-reboot.zip
Wenn keine spezifischen Animationsdateien für den Soft-Neustart angegeben sind, wird in bootanim eine Standardanimation für android angezeigt.
Testen
Android 11 enthält eine Referenzimplementierung für einen Soft-Restart. Außerdem können Sie einen Soft-Restart mit CTS-Tests in UserspaceRebootHostTest überprüfen.
