Plataforma de referência

Com um novo produto chamado trout, o Android Automotive (AAOS) agora oferece suporte à implantação como uma máquina virtual (VM) de convidado em ambientes compatíveis com o padrão VirtIO. O trout é baseado na plataforma de referência virtual Cuttlefish e está disponível como a configuração do dispositivo trout. O código-fonte do espaço do usuário pode ser encontrado em device/google/trout. A tabela abaixo descreve a tecnologia usada para virtualizar cada um dos subsistemas em trout.

Recurso Tecnologia
HAL de controle de áudio vsock/gRPC
HAL de áudio virtio-snd
Bluetooth virtio-console
HAL de dumpstate vsock/gRPC
Sistema de visualização estendida (EVS) virtio-video
Modo garagem vsock/gRPC
Gráficos virtio-gpu
Sistema global de navegação por satélite (GNSS) virtio-console
HAL 2.0 de sensores virtio-scmi and IIO
Entrada de tela touch virtio-input
HAL veicular vsock/gRPC

Extend trout

O trout pode ser usado como ponto de partida para criar novos destinos de infoentretenimento no veículo (IVI, na sigla em inglês) do Android. A infraestrutura de build foi projetada para ser ampliada e personalizada. Exemplo:

# 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 ...]

Vários HALs do Android podem ser substituídos individualmente por implementações personalizadas, ou as implementações padrão são mantidas, mas alguns parâmetros de configuração são ajustados para estabelecer a comunicação adequada entre VMs no ambiente de destino. Esses HALs (incluindo o HAL do veículo, o HAL de controle de áudio e o HAL de dumpstate) são implementados por uma interface gRPC com suporte de uma conexão vsock entre o convidado AAOS e um sistema host que fornece a implementação do recurso. Elas precisam ser configuradas fornecendo os parâmetros de conexão vsock adequados como propriedades do fornecedor. O código-fonte funciona como a verdade absoluta sobre quais propriedades estão disponíveis para configuração e a semântica delas.

Criar trout

Compilar o espaço do usuário

Para compilar o espaço do usuário:

  1. Faça o download da árvore de origem do Android:
    repo init -u https://android.googlesource.com/platform/manifest -b main
    repo sync -j8
    
  2. Crie o ambiente:
    source build/envsetup.sh
    lunch aosp_trout_arm64-userdebug
    make -j24
    

Criar o kernel

Para a trout 1.1, a base de código do kernel é fornecida no AOSP. O kernel trout é composto pelo mesmo código do ACK 5.10 upstream, com a adição de módulos específicos de trout para subsistemas VirtIO.

  1. Para clonar o kernel, execute:
    repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
    
  2. Para criar o kernel, execute o seguinte:
    BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
    

O fornecedor do hipervisor pode exigir uma configuração de kernel diferente ou módulos adicionais que precisam ser compilados. Siga essas orientações específicas, se fornecidas.

Compliance

Quando o AAOS é executado como uma VM de convidado, nosso objetivo é ser uma implantação do Android compatível do ponto de vista do framework. Os problemas do host são de responsabilidade de cada implementação e estão fora do escopo da trout 1.1.

Não realizamos outra validação do xTS na trout 1.1. Continue a consultar a discussão abaixo sobre o suporte ao CTS no trout 1.0.

Na trout 1.0, vários problemas do CTS ainda existem. Os seguintes módulos do CTS incluem falhas de teste:

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

As seguintes áreas do CTS-V incluem falhas de teste:

Teste do iniciador de carro
Teste de publicidade Bluetooth de baixa energia (BLE)
Verificador de qualidade de vídeo de streaming
Teste de dispositivo HID Bluetooth
Teste de microfone de ultrassom Hi-Fi
Teste de alto-falante de ultrassom Hi-Fi
Teste de desbloqueio do dispositivo necessário
Teste de descoberta de sensores dinâmicos
Teste de sensor fora do corpo
Teste de movimento significativo
Teste de notificação de roteamento de saída de áudio
Teste de solicitação ou sugestão de rede

Notas da versão

O trout 1.1 apresenta os seguintes problemas conhecidos:

  • As builds do usuário de trout não estão disponíveis. O sistema é criado como -userdebug, o que pode afetar alguns testes do CTS.
  • O Android Verified Boot (AVB) não é compatível.
  • Alguns subsistemas do Android podem estar indisponíveis, incluindo o mundo seguro e o NNHAL.
  • O acesso à rede de visitantes geralmente é fornecido por um adaptador Wi-Fi virtualizado e um túnel virtio-net. A conectividade do host depende da implantação específica do hipervisor.
  • Algumas implementações podem oferecer recursos limitados ou nenhum recurso de Bluetooth.
  • A injeção de eventos do VHAL pode não funcionar para alguns sensores.
  • Alguns trabalhos pesados podem causar falhas na reprodução de áudio.
  • Em algumas implementações, a reinicialização do adb do convidado do AAOS pode reiniciar o sistema inteiro.
  • O STS pode causar instabilidade no sistema e exigir uma reinicialização.

Para mais detalhes, consulte as notas da versão do parceiro para sua implantação específica de trout.