Proces rozruchu to łańcuch działań rozpoczynający się od rozruchowej pamięci ROM, po której następuje program ładujący, jądro, Init , Zygote i serwer systemowy (pogrubienie oznacza proces rozruchu specyficzny dla Androida). W procesie rozruchu specyficznym dla motoryzacji wczesne usługi, takie jak kamera cofania (RVC), muszą zostać uruchomione podczas rozruchu jądra.
Zamówienie | Część | Android | Samochody z Androidem |
---|---|---|---|
1 | Uruchom ROM | Ładuje pierwszy etap modułu ładującego do wewnętrznej pamięci RAM. | |
2 | Program rozruchowy | Inicjuje pamięć, sprawdza bezpieczeństwo i ładuje jądro. | |
3 | Jądro | Konfiguruje kontrolery przerwań, ochronę pamięci, pamięci podręczne i planowanie; uruchamia procesy przestrzeni użytkownika. | Proces kamery cofania (RVC) rozpoczyna się na wczesnym etapie uruchamiania jądra. Po zakończeniu procesu GPIO z VMCU powoduje wyświetlenie RVC na wyświetlaczu. |
4 | Rozpocznij proces | Analizuje skrypty init.rc , montuje systemy plików, uruchamia Zygote, uruchamia proces systemowy. | HAL pojazdu (VHAL) rozpoczyna się w fazie początkowej w ramach usług podstawowych. Można przenieść do wcześniejszych stanów w zależności od ServiceManager; wymaga usunięcia zależności od bibliotek współdzielonych (takich jak init). |
5 | Zygota | Konfiguruje środowisko wykonawcze Java i pamięć inicjującą dla obiektów Androida. | |
6 | Serwer systemowy | Pierwszy komponent Java w systemie uruchamia podstawowe usługi Androida. | CarService uruchamia się po uruchomieniu wszystkich usług systemowych. |
Zoptymalizuj czas uruchamiania
Aby skrócić czas uruchamiania systemu, postępuj zgodnie z poniższymi wskazówkami:
Jądro. Załaduj tylko używane moduły i zainicjuj tylko używane komponenty sprzętowe.
init.rc
- Uważaj na operacje blokujące (usługa w porównaniu z wywoływaniem poleceń).
- Rozpocznij tylko to, co jest używane.
- Ustawianie prawidłowego priorytetu usług.
Zygota. Optymalizacja wstępnego ładowania klas (określ listę klas 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 uzyskać pomoc w optymalizacji, Google udostępnia następujące 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 zarejestrować wejścia/wyjścia dla procesów podczas rozruchu. Musisz skompilować jądro z określonymi flagami (patrz plikREADME.md
).
Rozpocznij usługi wcześniej
W sekwencji rozruchowej niektóre usługi mogą zostać uruchomione przed uruchomieniem systemu Android.
Tylna kamera
Kamera cofania (RVC) powinna być obsługiwana w jądrze. VMCU powiadamia natywny proces jądra, gdy pojazd przełącza się na bieg wsteczny, po czym natywny proces jądra wyświetla obraz RVC na wyświetlaczu. HAL pojazdu może sterować RVC za pomocą hardware/libhardware/include/hardware/vehicle_camera.h
.
Pojazd HAL (VHAL)
Niektóre systemy mogą wymagać odczytania i buforowania danych CAN (na przykład prędkości pojazdu, stanu biegu) na wczesnych etapach sekwencji rozruchowej, podczas oczekiwania na uruchomienie usługi przestrzeni użytkownika (co ma miejsce w dalszej części sekwencji rozruchowej). Ten scenariusz wymaga bardzo wczesnego uruchomienia VNS oraz kontrolerów HAL i CAN, zwykle w ciągu kilku sekund.
Systemy, które można szybko zamontować
/system
mogą po prostu wcześniej 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 rozruchowego jądra i statycznie połączyć wszystkie zależne biblioteki.