Bootzeit verwalten

Der Startvorgang ist eine Kette von Aktionen, die beim Start-ROM beginnen, gefolgt vom Bootloader, dem Kernel, Init , Zygote und dem Systemserver (fett markiert den Android-spezifischen Startvorgang). Beim automobilspezifischen Startvorgang müssen frühe Dienste wie die Rückfahrkamera (RVC) während des Kernel-Startvorgangs gestartet werden.

Befehl Komponente Android Android Automotive
1 Boot-ROM Lädt die erste Stufe des Bootloaders in den internen RAM.
2 Bootloader Initialisiert die Speicher, überprüft die Sicherheit und lädt den Kernel.
3 Kernel Richtet Interrupt-Controller, Speicherschutz, Caches und Zeitplanung ein; startet User-Space-Prozesse. Der Rückfahrkamera-Prozess (RVC) beginnt früh beim Kernel-Start. Nachdem der Prozess abgeschlossen ist, löst GPIO von VMCU aus, dass RVC auf dem Display angezeigt wird.
4 Init-Prozess Analysiert init.rc Skripte, mountet Dateisysteme, startet Zygote und startet den Systemprozess. Fahrzeug-HAL (VHAL) startet während der Initialisierungsphase als Teil der Kerndienste. Kann je nach ServiceManager in frühere Zustände verschoben werden; erfordert das Entfernen von Abhängigkeiten von gemeinsam genutzten Bibliotheken (z. B. init).
5 Zygote Richtet Java Runtime und Init-Speicher für Android-Objekte ein.
6 Systemserver Erste Java-Komponente im System, startet Kern-Android-Dienste. CarService startet, nachdem alle Systemdienste gestartet wurden.

Optimieren Sie die Bootzeit

Um die Startzeit Ihres Systems zu verbessern, befolgen Sie die folgenden Richtlinien:

  • Kernel. Laden Sie nur die verwendeten Module und initialisieren Sie nur die verwendeten Hardwarekomponenten.

  • init.rc

    • Achten Sie auf blockierende Vorgänge (Dienst im Vergleich zum Befehlsaufruf).
    • Beginnen Sie nur mit dem, was verbraucht wird.
    • Festlegen der richtigen Priorität für Dienste.
  • Zygote. Optimierung des Vorladens von Klassen (geben Sie die Liste der zu ladenden Klassen an).

  • Paket-Manager

  • Systemserver. Starten Sie nur die Systemdienste, die verwendet werden.

Als Hilfe bei der Optimierung stellt Google folgende Tools zur Verfügung:

  • Verwenden Sie packages/services/Car/tools/bootanalyze/bootanalyze.py , um Logcat- und Dmesg-Protokolle zu analysieren.

  • Verwenden Sie packages/services/Car/tools/bootio/ um E/A für Prozesse während des Startvorgangs aufzuzeichnen. Sie müssen den Kernel mit bestimmten Flags kompilieren (siehe Datei README.md ).

Beginnen Sie frühzeitig mit den Diensten

In der Startreihenfolge werden möglicherweise einige Dienste gestartet, bevor Android mit dem Booten beginnt.

Rückfahrkamera

Die Rückfahrkamera (RVC) sollte im Kernel verwaltet werden. Die VMCU benachrichtigt den nativen Kernel-Prozess, wenn das Fahrzeug in den Rückwärtsgang schaltet, woraufhin der native Kernel-Prozess das RVC-Bild auf dem Display anzeigt. Die Fahrzeug-HAL kann die RVC mithilfe hardware/libhardware/include/hardware/vehicle_camera.h steuern.

Fahrzeug-HAL (VHAL)

Einige Systeme müssen möglicherweise CAN-Daten (z. B. Fahrzeuggeschwindigkeit, Gangstatus) in den frühen Phasen der Startsequenz lesen und puffern, während sie auf den Start des User-Space-Dienstes warten (was später in der Startsequenz erfolgt). Dieses Szenario erfordert, dass VNS und die HAL- und CAN-Controller sehr früh starten, normalerweise innerhalb weniger Sekunden.

  • Systeme, die /system schnell bereitstellen können, können einfach den Service Manager und dann VNS frühzeitig starten.

  • Ein System, das /system nicht schnell mounten kann, muss sowohl Service Manager als auch VNS auf das Kernel-Boot-Image verschieben und alle abhängigen Bibliotheken statisch verknüpfen.