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 인스턴스 중 하나에만 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 에이전트에서 번역에 필요한 메타데이터를 가져옵니다. SOME/IP 브로커와 동일한 VM에 VSIDL 에이전트를 배포해야 합니다.

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 외부에 있는 종속 프로토콜의 디렉터리를 지정합니다. 종속 프로토콜의 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 모드를 사용하는 경우 정의해야 합니다.