Le processus de démarrage est une chaîne d'actions qui commence par la ROM de démarrage, suivie du bootloader, du noyau, de Init, de Zygote et du serveur système (le gras indique le processus de démarrage spécifique à Android). Dans le processus de démarrage spécifique au secteur automobile, les services précoces tels que la caméra de recul doivent démarrer pendant le démarrage du noyau.
Trier | Component | Android | Android Automotive |
---|---|---|---|
1 | ROM de démarrage | Charge la première étape du bootloader dans la RAM interne. | |
2 | Bootloader (chargeur d'amorçage) | Initialise les mémoires, vérifie la sécurité et charge le noyau. | |
3 | Noyau | Configure les contrôleurs d'interruption, la protection de la mémoire, les caches et la planification, et lance les processus de l'espace utilisateur. | Le processus de la caméra de recul commence tôt lors du démarrage du kernel. Une fois le processus en cours, le GPIO du VMCU déclenche l'affichage du RVC. |
4 | Processus d'initialisation | Analyse les scripts init.rc , installe les systèmes de fichiers, lance Zygote et lance le processus système. |
Le HAL du véhicule (VHAL) démarre pendant la phase d'initialisation dans le cadre des services principaux. Peut être déplacé vers des états antérieurs en fonction de ServiceManager. Nécessite la suppression des dépendances sur les bibliothèques partagées (telles que init). |
5 | Zygote | Configure l'environnement d'exécution Java et la mémoire d'initialisation pour les objets Android. | |
6 | Serveur système | Le premier composant Java du système lance les principaux services Android. | CarService démarre après le démarrage de tous les services système. |
Optimiser le temps de démarrage
Pour améliorer le temps de démarrage de votre système, suivez les consignes ci-dessous:
-
Kernel Chargez uniquement les modules en cours d'utilisation et n'initialisez que les composants matériels en cours d'utilisation.
-
init.rc
- Surveillez les opérations bloquantes (service par rapport à l'appel de commande).
- Ne démarrez que ce qui est utilisé.
- Définir la priorité correcte pour les services
-
Zygote. Optimisation du préchargement de classe (spécifiez la liste des classes à charger).
-
Gestionnaire de paquets
-
Optimisez l'image du produit pour n'inclure que les APK utilisés.
-
-
Serveur système. Démarrez uniquement les services système utilisés.
Pour vous aider à optimiser votre site, Google met à votre disposition les outils suivants:
-
Utilisez
packages/services/Car/tools/bootanalyze/bootanalyze.py
pour analyser les journaux logcat et dmesg. -
Utilisez
packages/services/Car/tools/bootio/
pour enregistrer les E/S des processus pendant le démarrage. Vous devez compiler le noyau avec des options spécifiques (reportez-vous au fichierREADME.md
).
Démarrer les services à l'avance
Dans la séquence de démarrage, certains services peuvent démarrer avant qu'Android ne démarre.
Caméra de recul
La caméra de recul doit être gérée dans le noyau. Le VMCU informe le processus de kernel natif lorsque le véhicule passe en marche arrière, après quoi le processus de kernel natif affiche l'image de la RVC sur l'écran. Le HAL du véhicule peut contrôler le RVC à l'aide de hardware/libhardware/include/hardware/vehicle_camera.h
.
HAL véhicule (VHAL)
Certains systèmes peuvent avoir besoin de lire et de tamponner des données CAN (par exemple, la vitesse du véhicule, l'état de la vitesse) au cours des premières étapes de la séquence de démarrage en attendant le démarrage du service d'espace utilisateur (qui se produit plus tard dans la séquence de démarrage). Ce scénario nécessite que le VNS et les contrôleurs HAL et CAN démarrent très tôt, généralement en quelques secondes.
-
Les systèmes capables de monter rapidement
/system
peuvent simplement lancer le gestionnaire de services, puis VNS plus tôt. -
Un système qui ne peut pas monter rapidement
/system
doit déplacer à la fois le gestionnaire de services et le VNS vers l'image de démarrage du kernel, et associer de manière statique toutes les bibliothèques dépendantes.