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) convidada em ambientes compatíveis com o padrão VirtIO. trout é baseado na plataforma de referência virtual do Cuttlefish e está disponível como a configuração de 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 no 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, na sigla em inglês) virtio-video
Modo garagem vsock/gRPC
Gráficos virtio-gpu
Sistema global de navegação por satélite (GNSS, na sigla em inglês) virtio-console
HAL 2.0 de sensores virtio-scmi and IIO
Entrada da tela touch virtio-input
HAL veicular vsock/gRPC

Estender o trout

O trout pode ser usado como ponto de partida para criar novos destinos do Android de infoentretenimento no veículo (IVI). A infraestrutura de build foi projetada para ser estendida 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 mantidas, mas alguns parâmetros de configuração ajustados para estabelecer a comunicação adequada entre VMs no ambiente de destino. Esses HALs (incluindo o HAL veicular, o HAL de controle de áudio e o HAL de dumpstate) são implementados por meio de uma interface gRPC com suporte de uma conexão vsock entre o convidado do AAOS e um sistema host que fornece a implementação do recurso subjacente. Eles precisam ser configurados fornecendo os parâmetros de conexão vsock adequados como propriedades do fornecedor. O código-fonte atua como a verdade absoluta sobre quais propriedades estão disponíveis para configuração e a semântica delas.

Criar o 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 o trout 1.1, a base de código do kernel é fornecida no AOSP. O trout kernel é composto pelo mesmo código do ACK 5.10 upstream, com a adição de trout-specific módulos 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:
    BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
    

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

Compliance

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

Não realizamos validação xTS adicional no trout 1.1. Continue consultando a discussão abaixo sobre o suporte do CTS no trout 1.0.

No trout 1.0, vários problemas do CTS permanecem. Os seguintes módulos do CTS são conhecidos por incluir 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 são conhecidas por incluir falhas de teste:

Teste do Car Launcher
Teste do anunciante de Bluetooth de baixa energia (BLE, na sigla em inglês)
Verificador de qualidade de vídeo em streaming
Teste de dispositivo HID Bluetooth
Teste de microfone de ultrassom de alta fidelidade
Teste de alto-falante de ultrassom de alta fidelidade
Teste de dispositivo desbloqueado necessário
Teste de descoberta de sensor dinâmico
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 de lançamento

O trout 1.1 contém os seguintes problemas conhecidos:

  • As builds de usuário do 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 para visitantes é geralmente fornecido por meio de um adaptador Wi-Fi virtualizado e um virtio-net túnel. A conectividade do lado do host depende da implantação específica do hipervisor.
  • Algumas implementações podem oferecer capacidade limitada ou nenhuma de Bluetooth.
  • Uma injeção de evento VHAL pode não funcionar para alguns sensores.
  • Algumas cargas de trabalho pesadas podem causar falhas na reprodução de áudio.
  • Em algumas implementações, a reinicialização adb do convidado do AAOS pode reiniciar todo o sistema.
  • O STS pode causar instabilidade no sistema e exigir uma reinicialização.

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