Reference Platform

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.

The AAOS platform team has developed and verified the initial reference platform release 0.9 on the Qualcomm SA8155P chipset using the Lantronix reference hardware alongside the COQOS Hypervisor SDK from OpenSynergy.
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:

  1. Download the Android source tree:
    repo init -u https://android.googlesource.com/platform/manifest -b master
    repo sync -j8
    
  2. 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 under crosvm.
  • Graphics. In this release, the VirtIO GPU virgl device only works when dmabuf. is disabled. The UI shows inverted colors for red and blue.