Integrar SOME/IP com SDV

Integre o middleware escalonável orientado a serviços por IP (SOME/IP) com veículo definido por software (SDV) implantando e configurando vários componentes. Cada instância de broker requer uma implementação de pilha local correspondente. Neste documento, explicamos como:

  • Configurar uma implantação de agente único
  • Implante o broker SOME/IP como uma única ou várias instâncias.
  • Implante o agente da linguagem de dados interativos de serviços veiculares (VSIDL, na sigla em inglês)
  • Usar o Soong com vsidl_rc_generator

Exemplo de configuração

Os exemplos de SDV, como os de dispositivos Android virtuais Cuttlefish sdv_core_cf e hardware sdv_core_arm64, demonstram um esquema de implantação flexível. O broker e a pilha são iniciados com base em uma propriedade do sistema de tempo de inicialização, ro.boot.sdv.someip.enable.

É possível alcançar um único esquema de implantação de broker definindo androidboot.sdv.someip.enable=true em apenas uma das instâncias do SDV em execução no sistema.

# device/google/sdv/sdv_core_base/sdv.agents.rc
# Declare and start the SDV SOME/IP broker agent.
service sdv_someip_broker_agent /system_ext/bin/sdv_someip_broker_agent_comms
    class core
    disabled
    user system_ext_sdv_someip
    group system
on property:ro.sdv.orchestrator.state.ready=true && property:ro.boot.sdv.someip.enable=true
    start sdv_someip_broker_agent

Outro exemplo:

#device/google/sdv/sdv_core_cf/init.sdv_core_cf.rc
# Declare and start the sample SDV SOME/IP stack agent.
service sdv_someip_stack_agent /vendor/bin/sdv_someip_stack_agent
    class core
    disabled
    user system
    group system
    setenv VSOMEIP_CONFIGURATION /vendor/etc/someip/vsomeip_config.json
    setenv VSOMEIP_BASE_PATH /data/vendor/vsomeip/
on property:dev.bootcomplete=1 && property:ro.boot.sdv.someip.enable=true
    start sdv_someip_stack_agent

Implantação do agente

É possível implantar o broker SOME/IP como uma única ou várias instâncias no SDV. É possível dividir domínios (ou sub-redes) SOME/IP em diferentes instâncias independentes. Isso pode ser feito para equilibrar a carga ou melhorar o isolamento por motivos de segurança.

Cada instância precisa processar um conjunto desconexo de endpoints SOME/IP e SDV. Não é possível usar roteamento especial ou sincronização entre agentes. Uma configuração inadequada pode levar a publicações duplicadas ou resultados inconsistentes de descoberta de serviços.

Provedor de linguagem de dados interativos de serviços de veículos

O SOME/IP recebe do agente VSIDL os metadados necessários para traduções. É necessário implantar o agente VSIDL na mesma VM que o broker SOME/IP.

Quando usado com a opção de variante runtime-config-prebuilts, o agente VSIDL pode gerar um arquivo Android.bp. Esse arquivo contém regras pré-criadas que criam e implantam a configuração de tempo de execução relevante.

Soong

Para executar o vsidl_rc_generator fornecido pela SDV:

vsidl_rc_generator [OPTIONS] --catalog-path <CATALOG_PATH> --output-path <OUTPUT_PATH>

Você precisa fornecer estes argumentos:

  • --vsidl-path <VSIDL_PATH>
  • --catalog-path <CATALOG_PATH>
  • --output-path <OUTPUT_PATH>

Também é possível fornecer estes argumentos opcionais:

  • Opcional: --dependency-catalog-path <DEPENDENCY_CATALOG_PATH>...

    Especifica os diretórios dos protos dependentes fora do catalog_path. Para gerar a API Rust para os protos dependentes, cada diretório precisa conter um arquivo Android.bp. Esse arquivo precisa incluir uma meta de build rust_protobuf.

  • Opcional: --variant <VARIANT>

    O padrão é RuntimeConfig e especifica o modo em que o gerador de configuração de tempo de execução precisa ser executado. O RuntimeConfig gera arquivos de configuração de tempo de execução para SOME/IP e diagnósticos.

    O RuntimeConfigPrebuilts gera arquivos de build. Esses arquivos contêm módulos pré-criados. É possível usar esses módulos para incluir arquivos gerados pela variante RuntimeConfig em outros módulos ou na imagem da VM.

  • Opcional: --service-bundle-name <SERVICE_BUNDLE_NAME>

    Argumento para especificar o pacote de serviços em que o gerador de configuração de tempo de execução será aplicado.

  • Opcional: --package-name <PACKAGE_NAME>

    Além do argumento de nome do pacote de serviços, use este argumento para especificar o nome do pacote de serviços em que o gerador de configuração de tempo de execução será aplicado.

  • Opcional: --filegroup <FILEGROUP>

    Precisa ser definido ao usar o modo RuntimeConfigPrebuilts.