Intégrer SOME/IP à SDV

Intégrez le middleware évolutif orienté services sur IP (SOME/IP) au véhicule défini par logiciel (SDV) en déployant et en configurant plusieurs composants. Chaque instance d'agent nécessite une implémentation de pile locale correspondante. Ce document explique comment :

  • configurer un déploiement d'agent unique ;
  • déployer l'agent SOME/IP en tant qu'instance unique ou multiple ;
  • déployer l'agent VSIDL (Vehicle Services Interactive Data Language) ;
  • utiliser Soong avec vsidl_rc_generator.

Exemple de configuration

Les exemples de SDV, tels que ceux pour les appareils Android virtuels Cuttlefish sdv_core_cf et le matériel sdv_core_arm64, illustrent un schéma de déploiement flexible. L'agent et la pile démarrent chacun en fonction d'une propriété système au moment du démarrage, ro.boot.sdv.someip.enable.

Vous pouvez obtenir un schéma de déploiement d'agent unique en définissant androidboot.sdv.someip.enable=true sur une seule des instances de SDV exécutées sur le système.

# 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

Prenons cet autre exemple :

#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

Déploiement de l'agent

Vous pouvez déployer l'agent SOME/IP en tant qu'instance unique ou multiple dans SDV. Vous pouvez diviser les domaines SOME/IP (ou les sous-réseaux) en différentes instances indépendantes. Vous pouvez le faire pour équilibrer la charge ou améliorer l'isolation à des fins de sécurité.

Chaque instance doit traiter un ensemble disjoint de points de terminaison SOME/IP et SDV. Vous ne pouvez pas utiliser de routage spécial ni de synchronisation entre agents. Une configuration incorrecte peut entraîner des publications en double ou des résultats de détection de service incohérents.

Fournisseur de langage de données interactif pour les services de véhicules

SOME/IP obtient les métadonnées requises pour les traductions de l'agent VSIDL. Vous devez déployer l'agent VSIDL sur la même VM que l'agent SOME/IP.

Lorsqu'il est utilisé avec l'option de variante runtime-config-prebuilts, l'agent VSIDL peut générer un fichier Android.bp. Ce fichier contient des règles prédéfinies qui compilent et déploient la configuration d'exécution pertinente.

Soong

Pour exécuter vsidl_rc_generator fourni par SDV :

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

Vous devez fournir les arguments suivants :

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

Vous pouvez également fournir les arguments facultatifs suivants :

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

    Spécifie les répertoires des protos dépendants en dehors de catalog_path. Pour générer l'API Rust pour les protos dépendants, chaque répertoire doit contenir un fichier Android.bp. Ce fichier doit inclure une cible de compilation rust_protobuf.

  • Facultatif : --variant <VARIANT>

    La valeur par défaut est RuntimeConfig et spécifie le mode dans lequel le générateur de configuration d'exécution doit s'exécuter. RuntimeConfig génère des fichiers de configuration d'exécution pour SOME/IP et les diagnostics.

    RuntimeConfigPrebuilts génère des fichiers de compilation. Ces fichiers contiennent des modules prédéfinis. Vous pouvez utiliser ces modules pour inclure des fichiers générés par la variante RuntimeConfig dans d'autres modules ou dans l'image de VM.

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

    Argument permettant de spécifier le bundle de services sur lequel appliquer le générateur de configuration d'exécution.

  • Facultatif : --package-name <PACKAGE_NAME>

    En plus de l'argument de nom de bundle de services, utilisez cet argument pour spécifier le nom de package du bundle de services sur lequel appliquer le générateur de configuration d'exécution.

  • Facultatif : --filegroup <FILEGROUP>

    Doit être défini lorsque vous utilisez le mode RuntimeConfigPrebuilts.