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
-
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 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 DateiREADME.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.