Plate-forme de référence

Grâce à un nouveau produit nommé trout, Android Automotive (AAOS) est désormais compatible avec le déploiement en tant que machine virtuelle (VM) invitée dans les environnements compatibles avec la norme VirtIO. trout est basé sur la plate-forme de référence virtuelle Cuttlefish et est disponible en tant que configuration de l'appareil trout. Le code source de l'espace utilisateur se trouve sur device/google/trout. Le tableau ci-dessous décrit la technologie utilisée pour virtualiser chacun des sous-systèmes de trout.

Fonctionnalité Technologie
HAL de contrôle audio vsock/gRPC
HAL audio virtio-snd
Bluetooth virtio-console
HAL Dumpstate vsock/gRPC
Extended View System (EVS) virtio-video
Mode Garage vsock/gRPC
Graphismes virtio-gpu
Système de navigation par satellite global (GNSS) virtio-console
HAL de capteur 2.0 virtio-scmi and IIO
Saisie par écran tactile virtio-input
HAL véhicule vsock/gRPC

Étendre la truite

trout peut servir de point de départ pour créer des cibles Android pour l'infodivertissement dans les véhicules (IVI). L'infrastructure de compilation est conçue pour être étendue et personnalisée. Exemple :

# 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 ...]

Plusieurs HAL Android peuvent être remplacés individuellement par des implémentations personnalisées, ou les implémentations par défaut peuvent être conservées, mais certains paramètres de configuration peuvent être ajustés pour établir une communication inter-VM appropriée dans l'environnement cible. Ces HAL (y compris le HAL du véhicule, le HAL de contrôle audio et le HAL Dumpstate) sont implémentés à l'aide d'une interface gRPC prise en charge par une connexion vsock entre l'invité AAOS et un système hôte fournissant l'implémentation de la fonctionnalité sous-jacente. Ils doivent être configurés en fournissant les paramètres de connexion vsock appropriés en tant que propriétés du fournisseur. Le code source sert de référence ultime sur les propriétés disponibles pour la configuration et leur sémantique.

Créer une truite

Compiler l'espace utilisateur

Pour compiler l'espace utilisateur:

  1. Téléchargez l'arborescence source Android:
    repo init -u https://android.googlesource.com/platform/manifest -b main
    repo sync -j8
    
  2. Créez l'environnement:
    source build/envsetup.sh
    lunch aosp_trout_arm64-userdebug
    make -j24
    

Compiler le noyau

Pour trout 1.1, le code source du noyau est fourni dans AOSP. Le noyau trout est composé du même code que l'ACK 5.10 en amont, avec l'ajout de modules spécifiques à trout pour les sous-systèmes VirtIO.

  1. Pour cloner le noyau, exécutez la commande suivante:
    repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
    
  2. Pour créer le kernel:
    BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
    

Votre fournisseur d'hyperviseur peut nécessiter une configuration de kernel différente ou des modules supplémentaires à compiler. Veillez à suivre ces consignes spécifiques, le cas échéant.

Conformité

Lorsque AAOS s'exécute en tant que VM invitée, notre objectif est de proposer un déploiement Android compatible du point de vue du framework. Les problèmes côté hôte relèvent de chaque implémentation et ne sont pas concernés par trout 1.1.

Nous n'avons pas effectué de validation xTS supplémentaire sur trout 1.1. Poursuivez la lecture de la discussion ci-dessous sur la prise en charge du CTS dans trout 1.0.

Dans trout 1.0, plusieurs problèmes CTS persistent. Les modules CTS suivants sont connus pour inclure des échecs de test:

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

Les zones CTS-V suivantes sont connues pour inclure des échecs de test:

Test du lanceur de voiture
Test de l'annonceur Bluetooth à basse consommation (BLE)
Test du vérificateur de qualité vidéo en streaming
Test de l'appareil HID Bluetooth
Test du micro à ultrasons haute fidélité
Test du haut-parleur à ultrasons haute fidélité
Test de l'appareil déverrouillé requis
Test de la détection dynamique des capteurs
Test du capteur hors du corps
Test de mouvement significatif
Test de notification de routage de sortie audio
Test de requête ou de suggestion réseau

Notes de version

trout 1.1 présente les problèmes connus suivants:

  • Les builds utilisateur de trout ne sont pas disponibles. Le système est créé en tant que -userdebug, ce qui peut affecter certains tests CTS.
  • Android Verified Boot (AVB) n'est pas compatible.
  • Certains sous-systèmes Android peuvent être indisponibles, y compris le monde sécurisé et NNHAL.
  • L'accès au réseau invité est généralement fourni à l'aide d'une adaptateur Wi-Fi virtualisé et d'un tunnel virtio-net. La connectivité côté hôte dépend de votre déploiement d'hyperviseur spécifique.
  • Certaines implémentations peuvent proposer des fonctionnalités Bluetooth limitées ou inexistantes.
  • L'injection d'événements VHAL peut ne pas fonctionner pour certains capteurs.
  • Certaines charges de travail lourdes peuvent entraîner des problèmes de lecture audio.
  • Dans certaines implémentations, le redémarrage adb de l'invité AAOS peut redémarrer l'ensemble du système.
  • Les STS peuvent entraîner une instabilité du système et nécessiter un redémarrage.

Pour en savoir plus, consultez les notes de version du partenaire pour votre déploiement spécifique de trout.