Gérer le temps de démarrage

Le processus de démarrage est une chaîne d'actions commençant à partir de la ROM de démarrage, suivie par le chargeur de démarrage, le noyau, Init , Zygote et le serveur système (le gras indique le processus de démarrage spécifique à Android). Dans le processus de démarrage spécifique à l'automobile, les premiers services tels que la caméra de recul (RVC) doivent démarrer pendant le démarrage du noyau.

Commande Composant Android Android automobile
1 ROM de démarrage Charge la première étape du chargeur de démarrage dans la RAM interne.
2 Chargeur de démarrage Insère ses 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 ; lance les processus de l’espace utilisateur. Le processus de caméra de recul (RVC) démarre au début du démarrage du noyau. Une fois le processus terminé, le GPIO de VMCU déclenche l'affichage de RVC.
4 Processus d'initialisation Analyse les scripts init.rc , monte les systèmes de fichiers, lance Zygote, lance le processus système. Le véhicule HAL (VHAL) démarre pendant la phase d'initialisation dans le cadre des services de base. Peut être déplacé vers des états antérieurs en fonction de ServiceManager ; nécessite de supprimer les dépendances sur les bibliothèques partagées (telles que init).
5 Zygote Configure Java Runtime et la mémoire d'initialisation pour les objets Android.
6 Serveur système Premier composant Java du système, démarre les services Android de base. CarService démarre une fois tous les services système démarrés.

Optimiser le temps de démarrage

Pour améliorer le temps de démarrage de votre système, suivez les instructions suivantes :

  • Noyau. Chargez uniquement les modules utilisés et initialisez uniquement les composants matériels utilisés.

  • init.rc

    • Surveillez les opérations de blocage (service par rapport à l’invocation de commande).
    • Commencez uniquement ce qui est utilisé.
    • Définir la priorité correcte pour les services.
  • Zygote. Optimisation du préchargement des classes (préciser la liste des classes à charger).

  • Directeur chargé d'emballage

  • Serveur système. Démarrez uniquement les services système utilisés.

Pour vous aider à l'optimisation, Google fournit 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 flags spécifiques (reportez-vous au fichier README.md ).

Démarrer les services plus tôt

Dans la séquence de démarrage, certains services peuvent démarrer avant qu'Android ne démarre.

Caméra de vision arrière

La caméra de recul (RVC) doit être gérée dans le noyau. Le VMCU informe le processus du noyau natif lorsque le véhicule passe en marche arrière, après quoi le processus du noyau natif affiche l'image RVC sur l'écran. Le HAL du véhicule peut contrôler le RVC à l'aide hardware/libhardware/include/hardware/vehicle_camera.h .

Véhicule HAL (VHAL)

Certains systèmes peuvent avoir besoin de lire et de mettre en mémoire tampon les données CAN (par exemple, la vitesse du véhicule, l'état du rapport) pendant les 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 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.

  • Le 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 noyau et lier statiquement toutes les bibliothèques dépendantes.