参考平台

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

功能 技术
音频控制 HAL vsock/gRPC
音频 HAL virtio-snd
蓝牙 virtio-console
转储状态 HAL vsock/gRPC
增强型视觉系统 (EVS) virtio-video
车库模式 vsock/gRPC
图形 virtio-gpu
全球导航卫星系统 (GNSS) virtio-console
传感器 HAL 2.0 virtio-scmi and 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 和转储状态 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
    

您的 Hypervisor 供应商可能要求不同的内核配置或需要编译其他模块。请务必遵循此特定指南(如果提供)。

合规性

当 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 设备测试
Hifi Ultrasound 麦克风测试
Hifi Ultrasound 扬声器测试
已解锁设备所需的测试
动态传感器发现测试
离身传感器测试
大幅动作测试
音频输出路由通知测试
网络请求或建议测试

版本说明

trout 1.1 包含以下已知问题:

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

如需了解更多详情,请参阅有关您的具体 trout 部署的合作伙伴版本说明。