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
Optimieren Sie das Produktbild so, dass nur verwendete APKs angezeigt werden.
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 DateiREADME.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.