將 SOME/IP 與 SDV 整合

部署及設定多個元件,將可擴充的服務導向中介軟體透過 IP (SOME/IP) 與軟體定義車輛 (SDV) 整合。每個代理程式執行個體都需要對應的本機堆疊實作。這份文件說明如何:

  • 設定單一代理程式部署作業
  • 將 SOME/IP 代理程式部署為單一或多個執行個體
  • 部署車輛服務互動式資料語言 (VSIDL) 代理程式
  • 搭配 vsidl_rc_generator 使用 Soong

範例設定

SDV 範例 (例如 Cuttlefish 虛擬 Android 裝置 sdv_core_cf 和硬體 sdv_core_arm64) 示範了彈性部署架構。代理程式和堆疊都會根據開機時間系統屬性 ro.boot.sdv.someip.enable 啟動。

您可以在系統上執行的其中一個 SDV 執行個體上設定 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

部署代理程式

您可以在 SDV 中將 SOME/IP 代理程式部署為單一或多個執行個體。您可以將 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 目錄。如要為依附元件 proto 產生 Rust API,每個目錄都必須包含 Android.bp 檔案。這個檔案必須包含 rust_protobuf 建構目標。

  • 選填:--variant <VARIANT>

    預設為 RuntimeConfig,並指定執行階段設定產生器必須執行的模式。RuntimeConfig 會產生 SOME/IP 和診斷的執行階段設定檔。

    RuntimeConfigPrebuilts 會產生建構檔案。這些檔案包含預先建構的模組。您可以使用這些模組,在其他模組或 VM 映像檔中加入 RuntimeConfig 變體產生的檔案。

  • 選填:--service-bundle-name <SERVICE_BUNDLE_NAME>

    這個引數可指定要套用執行階段設定產生器的服務套件。

  • 選填:--package-name <PACKAGE_NAME>

    除了服務套件名稱引數,您也可以使用這個引數指定要套用執行階段設定產生器的服務套件套件名稱。

  • 選填:--filegroup <FILEGROUP>

    使用 RuntimeConfigPrebuilts 模式時必須定義。