1. Processus de démarrage du système Android
Le processus de démarrage du système Android implique plusieurs étapes et composants. Voici une brève description du processus général de démarrage du système Android :
-
Bootloader (bootloader) : Lorsque vous allumez le système, le système charge d'abord le bootloader (bootloader), qui est un petit programme dont la fonction principale est d'initialiser le matériel et de charger l'image de démarrage du système d'exploitation. Un chargeur de démarrage se trouve généralement sur le support de stockage d'un périphérique, tel qu'une mémoire flash, et est fixé à un emplacement spécifique par le matériel.
-
Démarrage du noyau : le chargeur de démarrage charge le noyau du système d'exploitation (noyau). Le noyau est le cœur du système d'exploitation et est responsable de la gestion du matériel, de la mémoire, des processus et des pilotes de périphériques. Les appareils Android utilisent généralement le noyau Linux.
-
démarrage du processus d'initialisation :
init
après le démarrage du noyau, un processus de l'espace utilisateur nommé est démarré . La tâche principale de ce processus est d'initialiser l'espace utilisateur etinit.rc
de démarrer les services et applications système selon les règles définies dans le fichier de configuration. -
Analyse de la configuration init.rc :
init
le processus analyseinit.rc
le fichier de configuration, qui définit une série d'étapes d'initialisation, de services système et de paramètres de propriétés à effectuer au démarrage du système. -
Démarrage de Zygote :
init.rc
Parmi les services définis dans , il y aura un servicezygote
nommé .zygote
Un processus est un incubateur d'applications Android, un modèle pour de nouveaux processus de candidature. -
Démarrage du serveur système :
init.rc
un autre service important défini dans estsystem_server
.system_server
Il s'agit du service de base du système Android, responsable du démarrage et de la gestion de divers composants du système, tels que Activity Manager, Package Manager, Notification Manager, etc. -
Démarrage de l'application : Une fois
system_server
démarré, le système Android est prêt à exécuter les applications normalement. L'interface utilisateur est chargée et l'utilisateur peut interagir avec l'appareil. Les applications peuvent être déclenchées par des actions de l'utilisateur ou des événements en arrière-plan.
2. À propos du fichier init.rc
Le but du fichier init.rc est de démarrer les services principaux, de définir les propriétés et d'exécuter certains scripts d'initialisation au démarrage du système. Ces services et attributs jouent un rôle important dans le fonctionnement de l’ensemble du système.
-
Définition du service : La partie la plus importante du fichier init.rc est la définition du service (Service). Un service représente un composant du système, qui peut être un processus en arrière-plan, un processus démon ou d'autres tâches au niveau du système. Chaque service est défini par un nom et un ensemble d'attributs, notamment la commande de démarrage, le niveau de démarrage, les dépendances, etc. Voici un exemple de définition de service :
service servicename /system/bin/executable arg1 arg2 { class classname user username seclabel u:r:servicename:s0 oneshot }
Ici,
servicename
c'est le nom du service,/system/bin/executable
c'est l'exécutable binaire à exécuter etarg1 arg2
c'est le paramètre passé à l'exécutable.class
Définit le type de service, tel quemain
, ,zygote
,media
etc.user
L'utilisateur en cours d'exécution du service est spécifiéseclabel
et l'étiquette de sécurité est définie,oneshot
indiquant que le service ne s'exécutera qu'une seule fois au démarrage. -
Paramètre de propriété : le fichier init.rc est également utilisé pour définir les propriétés du système. Les propriétés sont des paires clé-valeur utilisées pour contrôler le comportement et la configuration du système. Les attributs peuvent être partagés entre différents composants du système, affectant l'exécution des processus, le contrôle des autorisations, etc. Par exemple:
setprop ro.build.type user
setprop persist.sys.language en
-
Ces propriétés sont accessibles via le service de propriétés système (property_service) dans le système Android.
-
Niveaux de démarrage et dépendances : les services du fichier init.rc peuvent être assurés de démarrer au bon moment et dans le bon ordre en spécifiant les niveaux de démarrage et les dépendances. Le niveau de démarrage (sur les phases de démarrage) définit quand démarrer le service, par exemple
early-init
,init
, ,system-server
etc. Les dépendances peuvent garantir que certains services démarrent avant d'autres. Par exemple:on early-init start servicename
Ce code indique que le service
early-init
est démarré pendant l'étapeservicename
.
3. À propos du Zygote
Zygote est un processus spécial du système Android qui agit comme un incubateur d'applications pour créer de nouveaux processus d'application.
-
Création du processus Zygote : Lors du processus de démarrage du système Android, le processus Zygote est démarré par le processus init (le premier processus de l'espace utilisateur). Le processus Zygote précharge et initialise les classes, ressources et états couramment utilisés au démarrage du système afin de réduire le temps de démarrage des processus d'application ultérieurs.
-
État et ressources partagés : le processus Zygote charge de nombreuses classes et ressources couramment utilisées lors de l'initialisation, qui peuvent être partagées entre les processus d'application, accélérant ainsi le démarrage de nouveaux processus d'application. Ce partage inclut des classes préchargées, des ressources système, des parties de l'état de la machine virtuelle, etc.
-
Incubation d'applications : lorsqu'un utilisateur démarre une nouvelle application, le système Android ne crée pas de nouveau processus pour l'application, mais crée un nouveau processus de candidature en copiant le processus Zygote. Cela réduit l'utilisation de la mémoire et le temps de démarrage. Le nouveau processus de candidature est appelé « processus d’application » et hérite de l’état et des ressources du processus Zygote.
-
Initialisation de l'application : Dans le processus de candidature, les classes et ressources du processus Zygote sont déjà préchargées, ce qui permet à l'application de démarrer plus rapidement. Le processus d'application exécute ses propres
main()
méthodes pour initialiser les composants, les ressources et la logique métier de l'application. -
Isolation des applications : bien que les processus d'application héritent d'un certain état du processus Zygote, ils sont toujours isolés les uns des autres. Chaque application s'exécute dans son propre processus et ne peut pas accéder directement à la mémoire ou aux ressources les unes des autres. Cela contribue à améliorer la sécurité et la stabilité de l’application.