参考平台

通过名为 trout 的新产品,Android Automotive (AAOS) 现在支持在与 VirtIO 标准兼容的环境中作为访客虚拟机 (VM) 进行部署。trout 基于 Cuttlefish 虚拟参考平台,并以 trout 设备配置的形式提供。用户空间源代码可以在 device/google/trout 中找到。下表描述了用于虚拟化 trout 中每个子系统的技术。

功能 技术
音频控制 HAL vsock/gRPC
音频 HAL virtio-snd
蓝牙 virtio-console
Dumpstate HAL vsock/gRPC
扩展视图系统 (EVS) virtio-video
车库模式 vsock/gRPC
图形 virtio-gpu
全球导航卫星系统 (GNSS) virtio-console
传感器 HAL 2.0 virtio-scmi 和 IIO
触摸屏输入 virtio-input
车辆 HAL vsock/gRPC

扩展 trout

trout 可用作创建新的车载信息娱乐系统 (IVI) Android 目标平台的起点。构建基础架构旨在进行扩展和自定义。例如

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

可以单独使用自定义实现替换多个 Android HAL,或者保留默认实现,但调整某些配置参数以在目标环境中建立适当的虚拟机间通信。这些 HAL(包括车辆 HAL、音频控制 HAL 和 Dumpstate HAL)通过 gRPC 接口实现,该接口由 AAOS 访客和提供底层功能实现的主机系统之间的 vsock 连接提供支持。必须通过提供正确的 vsock 连接参数作为供应商属性来配置这些 HAL。源代码是关于哪些属性可用于配置及其语义的最终事实来源。

构建 trout

编译用户空间

要编译用户空间

  1. 下载 Android 源代码树
    repo init -u https://android.googlesource.com/platform/manifest -b main
    repo sync -j8
    
  2. 构建环境
    source build/envsetup.sh
    lunch aosp_trout_arm64-userdebug
    make -j24
    

构建内核

对于 trout 1.1,内核代码库在 AOSP 中提供。trout 内核由与上游 ACK 5.10 相同的代码组成,并添加了 VirtIO 子系统的 trout 特定模块。

  1. 要克隆内核,请运行
    repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
    
  2. 要构建内核,请运行
    BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
    

您的虚拟机监控程序供应商可能需要不同的内核配置或需要编译的其他模块。如果提供,请务必遵循此特定指南。

合规性

当 AAOS 作为访客虚拟机运行时,我们的目标是从框架角度来看成为兼容的 Android 部署。主机端问题是每个实现的权限范围,并且超出 trout 1.1 的范围。

我们尚未对 trout 1.1 执行额外的 xTS 验证。请继续参考下面关于 trout 1.0 中 CTS 支持的讨论。

trout 1.0 中,仍然存在一些 CTS 问题。已知以下 CTS 模块包含测试失败

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

已知以下 CTS-V 区域包含测试失败

车载启动器测试
蓝牙低功耗 (BLE) 广告商测试
流式视频质量验证程序
蓝牙 HID 设备测试
高保真超声波麦克风测试
高保真超声波扬声器测试
需要解锁设备测试
动态传感器发现测试
脱离身体传感器测试
显著运动测试
音频输出路由通知测试
网络请求或建议测试

版本说明

trout 1.1 包含以下已知问题

  • trout 的用户版本不可用。系统构建为 -userdebug,这可能会影响某些 CTS 测试。
  • 不支持 Android 验证启动 (AVB)。
  • 某些 Android 子系统可能不可用,包括安全世界和 NNHAL。
  • 访客网络访问通常通过虚拟化的 Wi-Fi 适配器和 virtio-net 隧道提供。主机端连接取决于您的特定虚拟机监控程序部署。
  • 某些实现可能提供有限或不提供蓝牙功能。
  • VHAL 事件注入可能不适用于某些传感器。
  • 某些重负载可能会导致音频播放故障。
  • 在某些实现中,AAOS 访客的 adb 重启可能会重启整个系统。
  • STS 可能会导致系统不稳定并需要重启。

有关更多详细信息,请参阅您的 trout 特定部署的合作伙伴版本说明。