Bootzeit verwalten

Der Bootvorgang ist eine Abfolge von Aktionen, die mit dem Boot-ROM beginnen, gefolgt vom Bootloader, Kernel, Init, Zygote und Systemserver. Fett formatierte Textstellen beziehen sich auf den Android-spezifischen Bootvorgang. Beim fahrzeugspezifischen Startvorgang müssen frühe Dienste wie die Rückkamera während des Kernelstarts gestartet werden.

Bestellen Komponente Android Android-Apps für Autos
1 Boot-ROM Lädt die erste Phase des Bootloaders in den internen RAM.
2 Bootloader Initiiert den Arbeitsspeicher, prüft die Sicherheit und lädt den Kernel.
3 Ploppendes Popcorn Richtet Interruptcontroller, Speicherschutz, Caches und Planung ein; startet Prozesse im Userspace. Der Prozess Rückkamera (Rearview Camera, RVC) wird früh im Kernel-Bootvorgang gestartet. Nachdem der Vorgang abgeschlossen ist, löst das GPIO von der VMCU den RVC aus, der auf dem Display angezeigt wird.
4 Init-Prozess Parset init.rc-Scripts, stellt Dateisysteme bereit, startet Zygote und startet den Systemprozess. Vehicle HAL (VHAL) wird während der Initiierungsphase als Teil der Hauptdienste gestartet. Kann je nach ServiceManager in frühere Status verschoben werden. Dazu müssen Abhängigkeiten von freigegebenen Bibliotheken (z. B. init) entfernt werden.
5 Zygote Richtet die Java-Laufzeit ein und initialisiert den Arbeitsspeicher für Android-Objekte.
6 System server Erste Java-Komponente im System, startet die wichtigsten Android-Dienste. CarService wird gestartet, nachdem alle Systemdienste gestartet wurden.

Bootzeit optimieren

Beachten Sie die folgenden Richtlinien, um die Bootzeit Ihres Systems zu verbessern:

  • Kernel Es werden nur die verwendeten Module geladen und nur die verwendeten Hardwarekomponenten initialisiert.

  • init.rc

    • Achten Sie auf blockierende Vorgänge (Dienst im Vergleich zur Befehlsausführung).
    • Starten Sie nur das, was verwendet wird.
    • Die richtige Priorität für Dienste festlegen
  • Zygote. Optimierung des Vorabladens von Klassen (Liste der zu ladenden Klassen angeben)

  • Paketmanager

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

Google stellt Ihnen die folgenden Tools zur Optimierung zur Verfügung:

  • Mit packages/services/Car/tools/bootanalyze/bootanalyze.py können Sie Logcat- und dmesg-Protokolle analysieren.

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

Dienste frühzeitig starten

Bei der Bootreihenfolge werden einige Dienste möglicherweise gestartet, bevor Android gestartet wird.

Rückkamera

Die Rückkamera sollte im Kernel verarbeitet werden. Die VMCU benachrichtigt den nativen Kernelprozess, wenn das Fahrzeug in den Rückwärtsgang schaltet. Daraufhin zeigt der native Kernelprozess das Rückwärtskamerabild auf dem Display an. Die Fahrzeug-HAL kann die Rückkamera über hardware/libhardware/include/hardware/vehicle_camera.h steuern.

Vehicle HAL (VHAL)

Bei einigen Systemen müssen möglicherweise in den frühen Phasen der Boot-Sequenz CAN-Daten (z. B. Fahrzeuggeschwindigkeit, Gangstatus) gelesen und zwischengespeichert werden, während auf den Start des User-Space-Dienstes gewartet wird (dies geschieht später in der Boot-Sequenz). In diesem Szenario müssen VNS sowie die HAL- und CAN-Controller sehr früh gestartet werden, in der Regel innerhalb weniger Sekunden.

  • Bei Systemen, die /system schnell bereitstellen können, können Sie einfach den Dienstmanager und dann frühzeitig VNS starten.

  • Bei einem System, auf dem /system nicht schnell bereitgestellt werden kann, müssen sowohl der Dienstmanager als auch der VNS in das Kernel-Boot-Image verschoben und alle abhängigen Bibliotheken statisch verknüpft werden.