SOME/IP を SDV と統合する

いくつかのコンポーネントをデプロイして構成することで、スケーラブルなサービス指向ミドルウェア over IP(SOME/IP)をソフトウェア定義車両(SDV)と統合します。各ブローカー インスタンスには、対応するローカル スタック実装が必要です。このドキュメントでは、次の方法について説明します。

  • 単一ブローカーのデプロイを構成する
  • SOME/IP ブローカーを単一または複数のインスタンスとしてデプロイする
  • 車両サービス インタラクティブ データ言語(VSIDL)エージェントをデプロイする
  • vsidl_rc_generator で Soong を使用する

構成の例

Cuttlefish 仮想 Android デバイス sdv_core_cf やハードウェア sdv_core_arm64 などの SDV の例は、柔軟なデプロイ スキーマを示しています。ブローカーとスタックはそれぞれ、起動時のシステム プロパティ ro.boot.sdv.someip.enable に基づいて起動します。

システムで実行されている SDV インスタンスの 1 つだけに androidboot.sdv.someip.enable=true を設定することで、単一のブローカー デプロイ スキーマを実現できます。

# 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

別の例を示します。

#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

ブローカーのデプロイ

SOME/IP ブローカーは、SDV で単一インスタンスまたは複数インスタンスとしてデプロイできます。SOME/IP ドメイン(またはサブネット)を異なる独立したインスタンスに分割できます。これは、ロード バランシングやセキュリティ目的の分離を改善するために行います。

各インスタンスは、SOME/IP エンドポイントと SDV エンドポイントの重複しないセットを処理する必要があります。特別なルーティングやエージェント間の同期は使用できません。構成が正しくないと、重複したパブリケーションやサービス検出結果の不整合が発生する可能性があります。

車両サービス インタラクティブ データ言語プロバイダ

SOME/IP は、VSIDL エージェントから変換に必要なメタデータを取得します。VSIDL エージェントは、SOME/IP ブローカーと同じ VM にデプロイする必要があります。

runtime-config-prebuilts バリアント オプションとともに使用すると、VSIDL エージェントは Android.bp ファイルを生成できます。このファイルには、関連するランタイム構成をビルドしてデプロイする事前構築済みルールが含まれています。

Soong

SDV が提供する vsidl_rc_generator を実行するには:

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

次の引数を指定する必要があります。

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

次のオプション引数を指定することもできます。

  • 省略可: --dependency-catalog-path <DEPENDENCY_CATALOG_PATH>...

    catalog_path の外部にある依存プロトのディレクトリを指定します。依存する proto の Rust API を生成するには、各ディレクトリに Android.bp ファイルが含まれている必要があります。このファイルには rust_protobuf ビルド ターゲットが含まれている必要があります。

  • 省略可: --variant <VARIANT>

    デフォルトは RuntimeConfig で、ランタイム構成ジェネレータが実行されるモードを指定します。RuntimeConfig は、SOME/IP と診断用のランタイム構成ファイルを生成します。

    RuntimeConfigPrebuilts はビルドファイルを生成します。これらのファイルには、ビルド済みのモジュールが含まれています。これらのモジュールを使用すると、RuntimeConfig バリアントで生成されたファイルを他のモジュールや VM イメージに含めることができます。

  • 省略可: --service-bundle-name <SERVICE_BUNDLE_NAME>

    ランタイム構成ジェネレータを適用するサービス バンドルを指定する引数。

  • 省略可: --package-name <PACKAGE_NAME>

    この引数は、サービス バンドル名引数に加えて、ランタイム構成ジェネレータを適用するサービス バンドル パッケージ名を指定するために使用します。

  • 省略可: --filegroup <FILEGROUP>

    RuntimeConfigPrebuilts モードを使用する場合は定義する必要があります。