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 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
-
Zoptymalizuj obraz produktu, aby zawierał tylko używane pliki APK.
-
-
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 plikREADME.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.