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
trout
są 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
.