Platforma referencyjna

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:

  1. Pobierz drzewo kodu źródłowego Androida:
    repo init -u https://android.googlesource.com/platform/manifest -b main
    repo sync -j8
    
  2. 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.

  1. Aby sklonować jądro, uruchom:
    repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
    
  2. 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.