Plataforma de referência

Por meio de um novo produto chamado trout , o Android Automotive (AAOS) agora oferece suporte para 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 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 no trout .

Característica Tecnologia
HAL de controle de áudio vsock/gRPC
Áudio HAL virtio-snd
Bluetooth virtio-console
Dumpstate HAL vsock/gRPC
Sistema de Visão Estendida (EVS) virtio-video
modo garagem vsock/gRPC
Gráficos virtio-gpu
Sistema global de navegação por satélite (GNSS) virtio-console
Sensor HAL 2.0 virtio-scmi and IIO
Entrada da tela sensível ao toque virtio-input
Veículo HAL vsock/gRPC

Estendendo a truta

A trout pode ser usada como ponto de partida para criar novos alvos Android de In-Vehicle Infotainment (IVI). A infraestrutura de construção foi projetada para ser estendida e personalizada. Por 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 certos parâmetros de configuração ajustados para estabelecer a comunicação adequada entre VMs no ambiente de destino. Esses HALs (incluindo Vehicle HAL, Audio Control HAL e Dumpstate HAL) são implementados por meio de uma interface gRPC apoiada por uma conexão vsock entre o convidado AAOS e um sistema host que fornece a implementação do recurso subjacente. Eles devem ser configurados por meio do fornecimento dos parâmetros de conexão vsock adequados como propriedades do fornecedor. O código-fonte atua como a verdade fundamental em que as propriedades estão disponíveis para configuração e sua semântica.

Construindo trutas

Compilar o espaço do usuário

Para compilar o espaço do usuário:

  1. Baixe a á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
    

Construindo o núcleo

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

Seu fornecedor de hipervisor pode ter uma configuração de kernel diferente necessária ou módulos adicionais que precisam ser compilados. Certifique-se de seguir esta orientação específica, se fornecida.

Conformidade

Quando o AAOS é executado como uma VM convidada, nosso objetivo é ser uma implantação do Android compatível do ponto de vista da estrutura. As questões relacionadas ao host são de competência de cada implementação e estão fora do escopo do trout 1.1.

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

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

Teste do lançador de carro
Teste de anunciante de Bluetooth Low Energy (BLE)
Verificador de qualidade de streaming de vídeo
Teste de dispositivo Bluetooth HID
Teste de microfone de ultrassom de alta fidelidade
Teste de alto-falante de ultrassom de alta fidelidade
Teste obrigatório de dispositivo desbloqueado
Teste de descoberta de sensor dinâmico
Teste do 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

trout 1.1 contém os seguintes problemas conhecidos:

  • As construções de trout do usuário não estão disponíveis. O sistema é construído como -userdebug , o que pode afetar alguns testes CTS.
  • Android Verified Boot (AVB) não é suportado.
  • Alguns subsistemas do Android podem estar indisponíveis, incluindo mundo seguro e NNHAL.
  • O acesso à rede de convidados geralmente é fornecido por meio de um adaptador Wi-Fi virtualizado e um túnel virtio-net . A conectividade do lado do host depende de sua implantação de hipervisor específica.
  • Algumas implementações podem oferecer capacidade Bluetooth limitada ou inexistente.
  • 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 AAOS pode reinicializar todo o sistema.
  • O STS pode causar instabilidade no sistema e exigir uma reinicialização.

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