3 votes

Comment effectuer un redémarrage à chaud en utilisant l'émulateur de terminal ?

Comment effectuer un redémarrage à chaud de mon appareil à l'aide de l'émulateur de terminal ? Je n'ai pas busybox installé, mais mon téléphone est enraciné.

EDIT : Je cherche une solution pour effectuer un redémarrage à chaud(voir Question rapide - Redémarrage à chaud - Android ) en utilisant l'émulateur de terminal/shell.

6voto

Irfan Latif Points 16863

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 .

2voto

alecxs Points 3105

Si l'appareil est enraciné, vous pouvez tuer le processus gui depuis le shell Root, il redémarrera immédiatement. l'application terminal et tous les sous-processus sont également tués, mais les processus shell adb survivront. tous les montages actuels restent intacts (même les montages manuels) l'appareil ne redémarre pas complètement

killall system_server

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X