Alors que le autre réponse déclare correctement un moyen de forcer un redémarrage (très) doux, je voudrais ajouter quelques détails approfondis (qui peuvent ne pas avoir de sens pour tout le monde :).
QU'EST-CE QUE LE REBOOT CHAUD / TIÈDE ?
Pour répondre à votre question, nous devons définir ce qu'est un redémarrage à chaud (ou tiède) sur un appareil Android. Les termes de démarrage à froid (ou dur) et de démarrage à chaud (ou doux) sont davantage associés aux PC, en particulier à Windows. Pour les téléphones mobiles ou les appareils intégrés, il est difficile de tracer une ligne claire entre le démarrage à froid et le démarrage à chaud. Dans le cas de Redémarrage à froid En général, l'alimentation des processeurs est coupée, ainsi que celle de la mémoire vive et même de la carte mère. Redémarrage en douceur ne fait que tuer et démarrer les processus, tout en conservant l'alimentation des composants matériels. La gestion de l'alimentation fait partie de la norme open-source ACPI/UEFI/BIOS sur les PC, tandis que sur les téléphones, le micrologiciel PMIC est généralement utilisé avec les SoC.
Comment fonctionne le REBOOT sur Android ?
Lors du (re)démarrage, le firmware du SoC charge des chargeurs de démarrage en mémoire qui chargent ensuite des binaires exécutables et lancent des processus (système d'exploitation réel). D'après ma réponse à Quel est le moyen le plus rapide d'éteindre un téléphone Android non rooté ? : Android est basé sur Noyau Linux - le tout premier exécutable du système d'exploitation qui est exécuté pendant processus de démarrage . Le noyau initialise le matériel nécessaire et prépare un environnement de base avant de s'exécuter. init
- le tout premier processus en espace utilisateur que nous pouvons voir. C'est init
qui démarre alors et s'occupe de tous les services et processus.
A civilisé chemin pour effectuer un redémarrage ou un arrêt, il faut laisser tous les processus se terminer en sauvegardant tout travail en cours, démonter les systèmes de fichiers, puis demander au noyau d'inverser le processus de démarrage. init
peut gérer cela sur les OS modernes ou vous pouvez le faire manuellement par le biais de /proc/sysrq-trigger
interface. Ou nous pouvons demander au noyau d'effectuer un redémarrage rapide en détruisant tout. Cependant, cela peut entraîner une perte de données, notamment en raison de la corruption du système de fichiers.
A brutal chemin est l'appui long sur le bouton d'alimentation (géré par le PMIC) qui est un redémarrage à froid (ou un arrêt) au sens propre car l'alimentation des CPU (et de la RAM) est soudainement coupée sans attendre que les processus de l'espace utilisateur et le noyau se terminent de manière gracieuse.
Android effectue-t-il un redémarrage à froid ?
Sur les téléphones Android (et sur d'autres systèmes également), un redémarrage normal n'est pas complètement froid car l'alimentation n'est pas coupée, du moins en ce qui concerne la RAM, car elle contient une zone où sont stockés les journaux de panique du noyau, auxquels il est possible d'accéder au prochain démarrage (cf. ramoops
utilisé pour last_kmsg
o pstore
). Voir d'autres conseils dans chargeur de démarrage raison du démarrage spécification . De même, certaines autres régions de mémoire allouées aux composants du SoC et aux microprogrammes signés qui sont isolés du processeur d'application (AP sur lequel fonctionne le système d'exploitation principal) ne peuvent pas être effacées. Il s'agit notamment du processeur de bande de base (modem), du processeur de signal numérique (DSP), du module WiFi / BT, etc.
Cependant, un redémarrage normal n'est pas non plus un redémarrage à chaud. Pendant le redémarrage, le noyau se tue lui-même et transmet le contrôle au(x) chargeur(s) de démarrage qui peut(vent) démarrer le dispositif dans différents modes possibles ( fastboot /bootloader, récupération o démarrage normal ). Les détails de bas niveau sont spécifiques au fournisseur et au matériel ; si un dispositif effectue une réinitialisation complète à la mise sous tension (PoR) ou si le matériel n'est pas réinitialisé du tout. Les composants qui sont mis hors tension pendant les différents types de redémarrage dépendent de l'interaction entre le noyau, le chargeur de démarrage, le SoC, le PMIC, le matériel de surveillance, etc.
COMMENT FAIRE UN REDÉMARRAGE À CHAUD ?
Le noyau Linux prend également en charge une autre forme de redémarrage à chaud : kexec
. Le noyau peut mettre fin aux processus de l'espace utilisateur et à lui-même, en exécutant un nouveau noyau qui peut alors démarrer un nouvel environnement de l'espace utilisateur sans réinitialisation du matériel, POST et réinitialisation par le BIOS. Voir kexec-reboot par exemple. Cependant, le nouveau noyau doit tenir compte du fait que les dispositifs matériels ne sont pas réinitialisés, et qu'ils ne seront donc pas en état de fonctionnement. état sain . Cette approche est théoriquement possible sur Android également, c'est-à-dire que le noyau se réexécute avec une ligne de commande appropriée et démarre ensuite init
. Mais cela nécessite quelques changements spécifiques au noyau et à la ROM. Voir un exemple de cas d'utilisation de kexecboot
.
Android standard ne fournit pas de fonctionnalité de redémarrage en douceur, mais certaines ROM personnalisées mettent en œuvre cette fonctionnalité en déclenchant le redémarrage en douceur. redémarrer méthode de activity
service . Cela tue zygote
et ses processus associés, notamment wificond
, netd
, mediaserver
, cameraserver
, audioserver
et certains démons de fournisseurs. Cependant, init
lui-même et d'autres démons de base comme ueventd
, vold
, installd
, surfaceflinger
, logd
, servicemanager
, healthd
et une longue liste de démons de fournisseurs ne sont pas redémarrés.
ActivityManagerService.restart
nécessite android.permission.SET_ACTIVITY_WATCHER
et appelle ActivityManagerService.shutdown
qui exige android.permission.SHUTDOWN
. Les deux permissions ont Niveau de protection signature
Les applications tierces ne peuvent donc pas en disposer. adb shell
n'a pas non plus le SHUTDOWN
permission, donc La racine est nécessaire .
Sur Android 9, le code pour restart
La méthode est 179
afin d'initier un redémarrage en douceur :
~# service call activity 179
Ou vous pouvez demander init
pour redémarrer zygote
et les services dépendants (SELinux ne permet pas de définir cette propriété, Root est donc nécessaire) :
~# setprop ctl.restart zygote
Il est également possible de redémarrer plus init
services de comamndline, ou changer init
pour tuer et démarrer tous les processus de l'espace utilisateur au lieu d'appeler le noyau au redémarrage. Cela dépend de votre objectif réel de redémarrage à chaud .