Zarządzaj czasem uruchamiania

Proces uruchamiania to ciąg działań, który zaczyna się od ROM-u rozruchowego, a potem przechodzi przez bootloader, jądro, Init, Zygoteserwer systemowy (pogrubienie wskazuje proces uruchamiania specyficzny dla Androida). W ramach procesu rozruchu specyficznego dla pojazdów wczesne usługi, takie jak kamera cofania, muszą być uruchamiane podczas uruchamiania jądra.

Zamówienie Komponent Android Android Automotive
1 Pamięć ROM rozruchowa Wczytuje pierwszy etap programu rozruchowego do wewnętrznej pamięci RAM.
2 Program rozruchowy Inicjowanie pamięci, weryfikacja zabezpieczeń i wczytywanie jądra.
3 Jądro Konfiguruje kontrolery przerwań, ochronę pamięci, pamięć podręczną i planowanie; uruchamia procesy użytkownika w pomieszczeniu. Proces tylnej kamery rozpoczyna się na wczesnym etapie uruchamiania jądra. Po uruchomieniu procesu GPIO z VMCU powoduje, że RVC wyświetla się na wyświetlaczu.
4 Proces inicjowania Przetwarza skrypty init.rc, montuje systemy plików, uruchamia Zygote, uruchamia proces systemowy. HAL pojazdu (VHAL) uruchamia się w fazie inicjalizacji jako część podstawowych usług. Może być przenoszony do wcześniejszych stanów w zależności od ServiceManagera; wymaga usunięcia zależności od wspólnych bibliotek (takich jak init).
5 Zygota Konfiguruje środowisko uruchomieniowe Java i pamięć początkową dla obiektów Androida.
6 Serwer systemu Pierwszy komponent Java w systemie, uruchamia podstawowe usługi Androida. Usługa CarService uruchamia się po uruchomieniu wszystkich usług systemowych.

Zoptymalizuj czas uruchamiania

Aby skrócić czas uruchamiania systemu, postępuj zgodnie z tymi wskazówkami:

  • Jądro. Wczytywanie tylko używanych modułów i inicjowanie tylko używanych komponentów sprzętowych.

  • init.rc

    • Zwróć uwagę na operacje blokujące (usługa w porównaniu z wywoływaniem poleceń).
    • Uruchom tylko to, co jest używane.
    • Ustawianie prawidłowego priorytetu usług.
  • Zygote. Optymalizacja wstępnego wczytywania zajęć (określ listę zajęć do załadowania).

  • Menedżer pakietów

  • Serwer systemowy. Uruchamiaj tylko używane usługi systemowe.

Aby ułatwić optymalizację, Google udostępnia te narzędzia:

  • Użyj packages/services/Car/tools/bootanalyze/bootanalyze.py, aby analizować logi logcat i dmesg.

  • Użyj packages/services/Car/tools/bootio/, aby rejestrować wejścia/wyjścia procesów podczas rozruchu. Musisz skompilować jądro z określonymi flagami (patrz plik README.md).

Wczesna aktywacja usług

W sekwencji uruchamiania niektóre usługi mogą być uruchamiane przed uruchomieniem Androida.

Kamera tylna

Kamera tylna (RVC) powinna być obsługiwana w jądrze. VMCU powiadamia natywny proces jądra, gdy pojazd włącza bieg wsteczny, a ten wyświetla obraz z RVC na wyświetlaczu. HAL pojazdu może sterować RVC za pomocą funkcji hardware/libhardware/include/hardware/vehicle_camera.h.

HAL pojazdu (VHAL)

Niektóre systemy mogą potrzebować odczytu i buforowania danych CAN (np. prędkości pojazdu, stanu przekładni) na wczesnych etapach sekwencji rozruchu i oczekiwania na uruchomienie usługi przestrzeni użytkownika (co następuje na późniejszym etapie sekwencji uruchamiania). W tym scenariuszu VNS oraz kontrolery HAL i CAN muszą uruchomić się bardzo wcześnie, zwykle w ciągu kilku sekund.

  • Systemy, które mogą szybko zamontować /system, mogą po prostu uruchomić menedżera usług, a następnie VNS.

  • System, który nie może szybko zamontować /system, musi przenieść zarówno menedżera usług, jak i VNS do obrazu rozruchu jądra, a także połączyć wszystkie biblioteki zależne statycznie.