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. Im Automotive-spezifischen Bootvorgang müssen frühe Dienste wie die Rückkamera (RVC) während des Kernel-Bootvorgangs 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 Erinnerungen, verifiziert die Sicherheit und lädt den Kernel. | |
3 | Kernel | 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 Kerndienste gestartet. Kann je nach ServiceManager in frühere Status verschoben werden; erfordert das Entfernen von Abhängigkeiten von gemeinsam genutzten Bibliotheken (z. B. init). |
5 | Zygote | Richtet die Java-Laufzeit ein und initialisiert den Arbeitsspeicher für Android-Objekte. | |
6 | System server | Die erste Java-Komponente im System startet die Android-Kerndienste. | CarService wird gestartet, nachdem alle Systemdienste gestartet wurden. |
Startzeit 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 wirklich benötigt wird.
- Die richtige Priorität für Dienste festlegen
-
Zygote. Optimierung des Vorabladens von Klassen (Liste der zu ladenden Klassen angeben)
-
Paketmanager
-
Optimieren Sie das Produktbild so, dass nur verwendete APKs enthalten sind.
-
-
Systemserver Starten Sie nur die Systemdienste, die verwendet werden.
Google stellt Ihnen die folgenden Tools zur Verfügung, die Sie bei der Optimierung unterstützen:
-
Mit
packages/services/Car/tools/bootanalyze/bootanalyze.py
können Sie Logcat- und dmesg-Protokolle analysieren. -
Verwenden Sie
packages/services/Car/tools/bootio/
, um die E/A für Prozesse während des Bootens aufzuzeichnen. Sie müssen den Kernel mit bestimmten Flags kompilieren (siehe DateiREADME.md
).
Dienste frühzeitig starten
In der Bootsequenz werden möglicherweise einige Dienste gestartet, bevor Android gestartet wird.
Rückkamera
Die Rückkamera muss im Kernel verwaltet 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.
Fahrzeug-HAL (VHAL)
Einige Systeme müssen möglicherweise zu Beginn der Startsequenz CAN-Daten (z. B. Fahrzeuggeschwindigkeit und Getriebestatus) lesen und zwischenspeichern, während sie auf den Start des User-Space-Dienstes warten (was später in der Startreihenfolge erfolgt). 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 den Dienstmanager und dann VNS einfach frühzeitig 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.