通过一个名为 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
编译用户空间
如需编译用户空间,请执行以下操作:
- 下载 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
您的 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
部署的合作伙伴版本说明。