Zarządzanie 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 w samochodach wczesne usługi, takie jak kamera cofania, muszą być uruchamiane podczas uruchamiania jądra.

Zamówienie Komponent Android Android Automotive
1 Pamięć ROM rozruchowa Ładuje pierwszy etap programu ładującego do wewnętrznej pamięci RAM.
2 Program rozruchowy Inicjowanie pamięci, weryfikacja zabezpieczeń i ładowanie jądra.
3 Bąbelki Konfiguruje kontrolery przerwań, ochronę pamięci, pamięć podręczną i planowanie; uruchamia procesy użytkownika w pokoju. Proces kamery tylnej (RVC) rozpoczyna się na wczesnym etapie uruchamiania jądra. Po zakończeniu procesu GPIO z VMCU powoduje, że RVC wyświetla się na ekranie.
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 (np. init).
5 Zygote Konfiguruje środowisko uruchomieniowe Java i pamięć początkową dla obiektów Androida.
6 Serwer systemowy Pierwszy komponent Java w systemie, uruchamia podstawowe usługi Androida. Usługa CarService uruchamia się po uruchomieniu wszystkich usług systemowych.

Optymalizacja czasu uruchamiania

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

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

  • init.rc

    • Zwróć uwagę na operacje blokowania (usługa w porównaniu z wywołaniem polecenia).
    • Uruchom tylko to, co jest używane.
    • Ustawianie prawidłowego priorytetu usług.
  • Zygote. Optymalizacja wstępnego wczytywania zajęć (określ listę zajęć do wczytania).

  • Menedżer pakietów

  • Serwer systemowy. Uruchamiać 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 przeanalizować logi logcat i dmesg.

  • Użyj packages/services/Car/tools/bootio/, aby rejestrować operacje wejścia/wyjścia dla procesów podczas uruchamiania. Musisz skompilować jądro z użyciem określonych flag (patrz plik README.md).

Wczesna aktywacja usług

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

Kamera wsteczna

Tylny aparat (RVC) powinien być obsługiwany w rdzeniu. VMCU powiadamia natywny proces jądra, gdy pojazd przełączy się na bieg wsteczny, a ten wyświetla obraz z RVC na wyświetlaczu. HAL pojazdu może sterować RVC za pomocą hardware/libhardware/include/hardware/vehicle_camera.h.

Interfejs HAL pojazdu (VHAL)

Niektóre systemy mogą wymagać odczytu i zapisu danych CAN (np. prędkości pojazdu czy stanu biegu) na wczesnych etapach sekwencji uruchamiania, podczas oczekiwania na uruchomienie usługi w przestrzeni użytkownika (co następuje później w sekwencji uruchamiania). W tym scenariuszu wymagane jest bardzo wczesne uruchamianie kontrolerów VNS, HAL i CAN, 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 zależne biblioteki statycznie.