Dzięki nowemu produktowi o nazwie trout Android Automotive (AAOS) obsługuje teraz wdrażanie jako maszyna wirtualna gościa w środowiskach zgodnych ze standardem VirtIO. trout opiera się na wirtualnej platformie referencyjnej Cuttlefish i jest dostępna jako konfiguracja urządzenia trout. Kod źródłowy userspace znajdziesz na stronie device/google/trout. Tabela poniżej opisuje technologię używaną do wirtualizacji poszczególnych podsystemów w trout.
| Funkcja | Technologia |
|---|---|
| HAL sterowania dźwiękiem | vsock/gRPC |
| HAL dźwięku | virtio-snd |
| Bluetooth | virtio-console |
| Dumpstate HAL | vsock/gRPC |
| System rozszerzonego widoku (EVS) | virtio-video |
| Tryb garażu | vsock/gRPC |
| Grafika | virtio-gpu |
| Globalny system nawigacji satelitarnej (GNSS) | virtio-console |
| Sensor HAL 2.0 | virtio-scmi and IIO |
| Dane wejściowe z ekranu dotykowego | virtio-input |
| Interfejs HAL pojazdu | vsock/gRPC |
Wydłużenie pstrąga
trout może służyć jako punkt wyjścia do tworzenia nowych celów związanych z systemem In-Vehicle Infotainment (IVI) na Androida. Infrastruktura kompilacji została zaprojektowana tak, aby można ją było rozszerzać i dostosowywać.
Przykład:
# Inherit trout-arm64 default values and settings
$(call inherit-product, device/google/trout/aosp_trout_arm64.mk)
# Customize HALs as needed
LOCAL_VHAL_PRODUCT_PACKAGE := vendor.oem.vhal@2.0-service
LOCAL_AUDIO_PRODUCT_PACKAGE := vendor.oem.audio@6.0-impl
# Configure SELinux policy
BOARD_SEPOLICY_DIRS += device/oem/car/sepolicy/vendor/oem
# Configure properties
LOCAL_DUMPSTATE_PROPERTIES := \
ro.vendor.dumpstate.server.cid=22 \
ro.vendor.dumpstate.server.port=406 \
ro.vendor.helpersystem.log_loc=/data/dumpstate
[... and more as needed ...]
Niektóre interfejsy HAL systemu Android można zastąpić niestandardowymi implementacjami, a w przypadku implementacji domyślnych można zachować niektóre parametry konfiguracji, aby zapewnić prawidłową komunikację między maszynami wirtualnymi w środowisku docelowym. Te interfejsy HAL (w tym Vehicle HAL, Audio Control HAL i Dumpstate HAL) są implementowane za pomocą interfejsu gRPC opartego na połączeniu vsock między gościem AAOS a systemem hosta, który zapewnia implementację funkcji podstawowej. Należy je skonfigurować, podając odpowiednie parametry połączenia vsock jako właściwości dostawcy. Kod źródłowy stanowi ostateczne źródło danych o tym, które właściwości są dostępne do konfiguracji, i ich semantyki.
Budowanie pstrąga
Kompilowanie przestrzeni użytkownika
Aby skompilować przestrzeń użytkownika:
- Pobierz drzewo kodu źródłowego Androida:
repo init -u https://android.googlesource.com/platform/manifest -b main repo sync -j8
- Tworzenie środowiska:
source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24
Kompilowanie jądra
W przypadku wersji trout 1.1 kod źródłowy jądra jest dostępny w AOSP. Kernel trout
składa się z tego samego kodu co upstream ACK 5.10, z dodatkiem modułów trout dla podsystemów VirtIO.
- Aby sklonować jądro, uruchom:
repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
- Aby utworzyć proces uruchamiania jądra:
BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
Dostawca hiperwizora może wymagać innej konfiguracji jądra lub dodatkowych modułów, które należy skompilować. Pamiętaj, aby postępować zgodnie z tymi wskazówkami (jeśli są dostępne).
Zgodność
Naszym celem jest zapewnienie zgodności z Androidem w ramach frameworku, gdy AAOS działa jako maszyna wirtualna gościa. Problemy po stronie hosta są domeną każdej implementacji i nie są objęte zakresem specyfikacji trout 1.1.
Nie przeprowadziliśmy dodatkowej weryfikacji xTS w wersji trout 1.1. Aby kontynuować, zapoznaj się z poniższą dyskusją na temat obsługi CTS w wersji trout 1.0.
W wersji trout 1.0 nadal występuje kilka problemów z pakietem CTS. W przypadku tych modułów CTS występują błędy testów:
| CtsStagedInstallHostTestCases CtsRollbackManagerHostTestCases CtsVideoTestCases CtsHostsideNetworkTests CtsActivityManagerBackgroundActivityTestCases CtsAdbHostTestCases CtsNativeHardwareTestCases CtsContentTestCases CtsCarHostTestCases CtsOsTestCases CtsStatsdHostTestCases CtsVoiceInteractionTestCases CtsViewTestCases CtsCameraTestCases CtsLocationGnssTestCases CtsGraphicsTestCases CtsIncidentHostTestCases CtsInstallHostTestCases CtsNativeVerifiedBootTestCases CtsNetTestCases |
CtsWindowManagerDeviceTestCases CtsMediaStressTestCases CtsAppTestCases CtsUsbTests CtsAutoFillServiceTestCases CtsDisplayTestCases CtsMediaTestCases CtsDeqpTestCases CtsDumpsysHostTestCases CtsOpenGLTestCasesCtsLibcoreTestCases CtsSecurityHostTestCases CtsInputMethodTestCases CtsStatsdAtomHostTestCases CtsPermission4TestCases CtsNNAPIBenchmarkTestCases CtsSimpleperfTestCases CtsAccessibilityTestCases CtsAppSecurityHostTestCases CtsKeystoreTestCases |
W przypadku tych obszarów CTS-V występują problemy z testami:
| Test uruchamiania w samochodzie Test reklamodawcy Bluetooth Low Energy (BLE) Sprawdzanie jakości strumieniowego przesyłania wideo Test urządzenia Bluetooth HID Test mikrofonu Hi-Fi z ultradźwiękami Test głośnika Hi-Fi z ultradźwiękami |
Test wymagający odblokowanego urządzenia Test wykrywania dynamicznego czujnika Test czujnika poza ciałem Test znaczącego ruchu Test powiadomienia o przekierowaniu wyjścia audio Test prośby o dane sieciowe lub sugestii |
Informacje o wersji
trout 1.1 zawiera te znane problemy:
- Wersje użytkownika
troutsą niedostępne. System jest budowany jako-userdebug, co może wpływać na niektóre testy CTS. - Funkcja Android Verified Boot (AVB) nie jest obsługiwana.
- Niektóre podsystemy Androida mogą być niedostępne, w tym bezpieczny świat i NNHAL.
- Dostęp do sieci dla gości jest zwykle zapewniany za pomocą wirtualnego adaptera Wi-Fi i tunelu
virtio-net. Łączność po stronie hosta zależy od konkretnego wdrożenia hypervisora. - Niektóre implementacje mogą mieć ograniczone możliwości Bluetooth lub nie mieć ich wcale.
- Wstrzyknięcie zdarzenia VHAL może nie działać w przypadku niektórych czujników.
- Niektóre obciążające zadania mogą powodować problemy z odtwarzaniem dźwięku.
- W niektórych implementacjach ponowne uruchomienie AAOS przez adb może spowodować ponowne uruchomienie całego systemu.
- Może to spowodować niestabilność systemu i wymagać jego ponownego uruchomienia.
Aby dowiedzieć się więcej, zapoznaj się z informacjami o wersji partnera dotyczącymi konkretnej implementacji trout.