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:
- Faça o download da árvore de origem do Android:
repo init -u https://android.googlesource.com/platform/manifest -b main repo sync -j8
- 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.
- Para clonar o kernel, execute:
repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
- 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
troutnã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-nettú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.