Integra SOME/IP con el SDV

Integra el middleware escalable orientado a servicios sobre IP (SOME/IP) con el vehículo definido por software (SDV) implementando y configurando varios componentes. Cada instancia de agente requiere una implementación de pila local correspondiente. En este documento, se describe cómo hacer lo siguiente:

  • Configura una implementación de un solo agente
  • Implementa el agente de SOME/IP como una sola instancia o como varias.
  • Implementa el agente del lenguaje de datos interactivos de servicios para vehículos (VSIDL)
  • Usa Soong con vsidl_rc_generator

Configuración de ejemplo

Los ejemplos de SDV, como los de los dispositivos Android virtuales de Cuttlefish sdv_core_cf y el hardware sdv_core_arm64, demuestran un esquema de implementación flexible. El agente y la pila se inician en función de una propiedad del sistema de tiempo de arranque, ro.boot.sdv.someip.enable.

Puedes lograr un esquema de implementación de un solo agente configurando androidboot.sdv.someip.enable=true en solo una de las instancias de SDV que se ejecutan en el 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

Otro ejemplo:

#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

Implementación de agentes

Puedes implementar el agente de SOME/IP como una sola instancia o como varias en el SDV. Puedes dividir los dominios (o las subredes) de SOME/IP en diferentes instancias independientes. Puedes hacerlo para equilibrar la carga o mejorar el aislamiento por motivos de seguridad.

Cada instancia debe procesar un conjunto disjunto de extremos de SOME/IP y SDV. No puedes usar el enrutamiento especial ni la sincronización entre agentes. Una configuración incorrecta puede generar publicaciones duplicadas o resultados incoherentes en la detección de servicios.

Proveedor de lenguaje de datos interactivos de servicios de vehículos

SOME/IP obtiene los metadatos necesarios para las traducciones del agente de VSIDL. Debes implementar el agente de VSIDL en la misma VM que el agente de SOME/IP.

Cuando se usa con la opción de variante runtime-config-prebuilts, el agente de VSIDL puede generar un archivo Android.bp. Este archivo contiene reglas prediseñadas que compilan e implementan la configuración del tiempo de ejecución pertinente.

Soong

Para ejecutar vsidl_rc_generator proporcionado por SDV, haz lo siguiente:

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

Debes proporcionar los siguientes argumentos:

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

También puedes proporcionar estos argumentos opcionales:

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

    Especifica los directorios de los protos dependientes fuera de catalog_path. Para generar la API de Rust para los protos dependientes, cada directorio debe contener un archivo Android.bp. Este archivo debe incluir un destino de compilación rust_protobuf.

  • Opcional: --variant <VARIANT>

    El valor predeterminado es RuntimeConfig y especifica el modo en el que se debe ejecutar el generador de configuración del tiempo de ejecución. RuntimeConfig genera archivos de configuración del entorno de ejecución para SOME/IP y diagnósticos.

    RuntimeConfigPrebuilts genera archivos de compilación. Estos archivos contienen módulos prediseñados. Puedes usar estos módulos para incluir archivos generados por la variante RuntimeConfig en otros módulos o en la imagen de la VM.

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

    Argumento para especificar el paquete de servicios en el que se aplicará el generador de configuración del tiempo de ejecución.

  • Opcional: --package-name <PACKAGE_NAME>

    Además del argumento del nombre del paquete de servicios, usa este argumento para especificar el nombre del paquete de servicios en el que se aplicará el generador de configuración del tiempo de ejecución.

  • Opcional: --filegroup <FILEGROUP>

    Se debe definir cuando se usa el modo RuntimeConfigPrebuilts.