Интеграция SOME/IP с SDV

Интеграция масштабируемого сервисно-ориентированного промежуточного программного обеспечения по IP ( SOME/IP ) с программно-определяемым транспортным средством (SDV) осуществляется путем развертывания и настройки нескольких компонентов. Для каждого экземпляра брокера требуется соответствующая локальная реализация стека. В этом документе описывается, как:

  • Настройте развертывание с использованием одного брокера.
  • Разверните брокер SOME/IP как в виде одного, так и в виде нескольких экземпляров.
  • Разверните агент интерактивного языка данных для служб транспортных средств (VSIDL).
  • Используйте Soong с vsidl_rc_generator

Пример конфигурации

Примеры SDV, такие как примеры для виртуальных устройств Android Cuttlefish sdv_core_cf и аппаратного обеспечения sdv_core_arm64 , демонстрируют гибкую схему развертывания. Брокер и стек запускаются на основе системного свойства, определяемого при загрузке, ro.boot.sdv.someip.enable .

Для реализации схемы развертывания с одним брокером необходимо установить параметр androidboot.sdv.someip.enable=true только для одного из экземпляров SDV, работающих в системе.

# 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.

При использовании с опцией runtime-config-prebuilts агент VSIDL может сгенерировать файл Android.bp . Этот файл содержит предварительно созданные правила, которые собирают и развертывают соответствующую конфигурацию среды выполнения.

Сунг

Для запуска vsidl_rc_generator , предоставляемого SDV:

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 , в другие модули или в образ виртуальной машины.

  • Необязательно: --service-bundle-name <SERVICE_BUNDLE_NAME>

    Аргумент для указания пакета служб, к которому следует применить генератор конфигурации среды выполнения.

  • Необязательно: --package-name <PACKAGE_NAME>

    В дополнение к аргументу имени пакета служб, используйте этот аргумент для указания имени пакета служб, к которому следует применить генератор конфигурации среды выполнения.

  • Необязательно: --filegroup <FILEGROUP>

    Этот параметр необходимо задать при использовании режима RuntimeConfigPrebuilts .