通过名为 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
编译用户空间
要编译用户空间
- 下载 Android 源代码树
repo init -u https://android.googlesource.com/platform/manifest -b main repo sync -j8
- 构建环境
source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24
构建内核
对于 trout
1.1,内核代码库在 AOSP 中提供。trout
内核由与上游 ACK 5.10 相同的代码组成,并添加了 VirtIO 子系统的 trout
特定模块。
- 要克隆内核,请运行
repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
- 要构建内核,请运行
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
特定部署的合作伙伴版本说明。