Proces uruchamiania to ciąg działań, który zaczyna się od ROM-u rozruchowego, a potem przechodzi przez bootloader, jądro, Init, Zygote i serwer 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
-
Zoptymalizuj obraz produktu, aby zawierał tylko używane pliki APK.
-
-
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 plikREADME.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.