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 d'appareil trout. Le code source de l'espace utilisateur se trouve dans 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 |
| Système de vue étendue (EVS) | virtio-video |
| Mode Garage | vsock/gRPC |
| Graphismes | virtio-gpu |
| Système mondial de navigation par satellite (GNSS) | virtio-console |
| HAL de capteur 2.0 | virtio-scmi and IIO |
| Entrée de l'écran tactile | virtio-input |
| HAL véhicule | vsock/gRPC |
Étendre trout
trout peut être utilisé comme point de départ pour créer de nouvelles cibles Android d'infodivertissement embarqué (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 véhicule, le HAL de contrôle audio et le HAL Dumpstate) sont implémentés à l'aide d'une interface gRPC soutenue par une connexion vsock entre l'invité AAOS et un système hôte fournissant l'implémentation de la fonctionnalité sous-jacente. Ces paramètres 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 vérité fondamentale ultime sur les propriétés disponibles pour la configuration et leur sémantique.
Compiler trout
Compiler l'espace utilisateur
Pour compiler l'espace utilisateur :
- Téléchargez l'arborescence source Android :
repo init -u https://android.googlesource.com/platform/manifest -b main repo sync -j8
- Créez l'environnement :
source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24
Compiler le noyau
Pour trout 1.1, la base de code du noyau est fournie dans AOSP. Le trout
noyau est composé du même code que l'ACK 5.10 en amont, avec l'ajout de
trout-spécifiques modules pour les sous-systèmes VirtIO.
- Pour cloner le noyau, exécutez la commande suivante :
repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
- Pour compiler le noyau, exécutez la commande suivante :
BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
Le fournisseur de votre hyperviseur peut avoir besoin d'une configuration de noyau différente ou de modules supplémentaires à compiler. Veillez à suivre ces instructions spécifiques, le cas échéant.
Conformité
Lorsque AAOS s'exécute en tant que VM invitée, notre objectif est d'être 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 couverts par trout 1.1.
Nous n'avons pas effectué de validation xTS supplémentaire sur trout 1.1. Continuez
à vous référer à la discussion ci-dessous sur la compatibilité 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 domaines CTS-V suivants sont connus pour inclure des échecs de test :
| Test du lanceur de voiture Test de l'annonceur Bluetooth à basse consommation (BLE) Vérificateur de la qualité de la vidéo en streaming Test de l'appareil Bluetooth HID Test du microphone à ultrasons Hi-Fi Test du haut-parleur à ultrasons Hi-Fi |
Test de l'appareil déverrouillé requis Test de la découverte dynamique des capteurs Test du capteur hors corps Test de mouvement significatif Test de notification de routage de la 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 compilations utilisateur de
troutne sont pas disponibles. Le système est conçu comme-userdebug, ce qui peut affecter certains tests CTS. - Le démarrage validé Android (AVB) n'est pas compatible.
- Il est possible que certains sous-systèmes Android ne soient pas disponibles, y compris le monde sécurisé et NNHAL.
- L'accès au réseau invité est généralement fourni au moyen d'une carte Wi-Fi virtualisée et
d'un
virtio-nettunnel. La connectivité côté hôte dépend de votre déploiement d'hyperviseur spécifique. - Certaines implémentations peuvent offrir 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.
- STS peut entraîner une instabilité du système et nécessiter un redémarrage.
Pour en savoir plus, consultez les notes de version partenaires pour votre déploiement spécifique de trout.