Through a new product named trout, Android Automotive (AAOS) now provides support for
deployment as a guest virtual machine (VM) in environments compatible with the
VirtIO
standard. trout
is based on the
Cuttlefish
virtual reference platform and is available as the trout
device configuration. The
userspace source code can be found at device/google/trout
. The table
below describes the technology used to virtualize each of the subsystems in trout
.
Feature | Technology |
---|---|
Audio Control HAL | vsock/gRPC |
Audio HAL | virtio-snd |
Dumpstate HAL | vsock/gRPC |
Extended View System (EVS) | virtio-video and vendor extensions |
Garage mode | vsock/gRPC |
Graphics | virtio-gpu |
Sensor HAL 2.0 | virtio-scmi and IIO |
Touchscreen input | virtio-input |
Vehicle HAL | vsock/gRPC |
Extending trout
trout
can be used as a starting point to create new In-Vehicle Infotainment (IVI) Android
targets. The build infrastructure is designed to be extended and customized. For example:
# 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 ...]
Several Android HALs can be individually replaced with custom implementations, or the
default implementations maintained but certain configuration parameters adjusted to establish
proper inter-VM communication in the target environment. These HALs (including Vehicle HAL,
Audio Control HAL, and Dumpstate HAL) are implemented by means of a gRPC interface backed by a
vsock
connection between the AAOS guest and a host system providing the
underlying feature implementation. These must be configured by means of supplying the proper
vsock
connection parameters as vendor properties.
Building trout
Compile the userspace
To compile the userspace:
- Download the Android source tree:
repo init -u https://android.googlesource.com/platform/manifest -b master repo sync -j8
- Build the environment:
source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24
Building the kernel
For the initial reference platform release 0.9, due to a hypervisor configuration limitation,
the Android kernel can't be customized. A prebuilt kernel will be provided as part of the
OpenSynergy hypervisor release. The kernel is based on Android Common Kernel branch
common-android11-5.4
with some modifications to incorporate the latest VirtIO drivers.
For informational purposes, the corresponding kernel source code is made available at these
locations:
Compliance
The plan is to achieve 100% compatibility in a later release.
Limitations and unsupported elements in trout
- Bluetooth.
- Global navigation satellite system (GNSS).
- LaunchCVD.
trout
doesn't currently boot undercrosvm
. - Graphics. In this release, the VirtIO GPU virgl device only works when
dmabuf
. is disabled. The UI shows inverted colors for red and blue.