SDV के साथ SOME/IP को इंटिग्रेट करना

कई कॉम्पोनेंट डिप्लॉय और कॉन्फ़िगर करके, स्केलेबल सर्विस-ओरिएंटेड मिडलवेयर ओवर आईपी (एसओएमई/आईपी) को सॉफ़्टवेयर से तय होने वाले वाहन (एसडीवी) के साथ इंटिग्रेट करें. हर ब्रोकर इंस्टेंस के लिए, स्थानीय स्टैक का लागू होना ज़रूरी है. इस दस्तावेज़ में, इन कामों को करने का तरीका बताया गया है:

  • एक ब्रोकर डिप्लॉयमेंट को कॉन्फ़िगर करना
  • एसओएमई/आईपी ब्रोकर को एक या एक से ज़्यादा इंस्टेंस के तौर पर डिप्लॉय करना
  • वाहन सेवाओं के इंटरैक्टिव डेटा लैंग्वेज (वीएसआईडीएल) एजेंट को डिप्लॉय करना
  • vsidl_rc_generator के साथ Soong का इस्तेमाल करना

कॉन्फ़िगरेशन का उदाहरण

एसडीवी के उदाहरण, जैसे कि कटलफ़िश वर्चुअल Android डिवाइसों sdv_core_cf और हार्डवेयर sdv_core_arm64 के उदाहरण, फ़्लेक्सिबल डिप्लॉयमेंट स्कीमा दिखाते हैं. ब्रोकर और स्टैक, दोनों बूट टाइम सिस्टम प्रॉपर्टी ro.boot.sdv.someip.enable के आधार पर शुरू होते हैं.

सिस्टम पर चल रहे एसडीवी के सिर्फ़ एक इंस्टेंस पर 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

ब्रोकर डिप्लॉयमेंट

एसडीवी में, एसओएमई/आईपी ब्रोकर को एक या एक से ज़्यादा इंस्टेंस के तौर पर डिप्लॉय किया जा सकता है. एसओएमई/आईपी डोमेन (या सबनेट) को अलग-अलग इंडिपेंडेंट इंस्टेंस में बांटा जा सकता है. लोड को बैलेंस करने या सुरक्षा के मकसद से आइसोलेशन को बेहतर बनाने के लिए, ऐसा किया जा सकता है.

हर इंस्टेंस को, एसओएमई/आईपी और एसडीवी एंडपॉइंट के अलग-अलग सेट को प्रोसेस करना होगा. खास राउटिंग या क्रॉस-एजेंट सिंक्रनाइज़ेशन का इस्तेमाल नहीं किया जा सकता. गलत कॉन्फ़िगरेशन की वजह से, डुप्लीकेट पब्लिकेशन या सेवा की खोज के नतीजे में गड़बड़ी हो सकती है.

वाहन सेवाओं के इंटरैक्टिव डेटा लैंग्वेज का प्रोवाइडर

एसओएमई/आईपी को अनुवाद के लिए ज़रूरी मेटाडेटा, वीएसआईडीएल एजेंट से मिलता है. वीएसआईडीएल एजेंट को उसी वीएम पर डिप्लॉय करना होगा जिस पर एसओएमई/आईपी ब्रोकर डिप्लॉय किया गया है.

runtime-config-prebuilts वैरिएंट विकल्प के साथ इस्तेमाल करने पर, वीएसआईडीएल एजेंट, Android.bp फ़ाइल जनरेट कर सकता है. इस फ़ाइल में, पहले से बनी ऐसी कार्रवाइयों के नियम शामिल होते हैं जो काम के रनटाइम कॉन्फ़िगरेशन को बनाते और डिप्लॉय करते हैं.

Soong

एसडीवी की ओर से दिए गए 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 बिल्ड टारगेट शामिल होना चाहिए.

  • Optional: --variant <VARIANT>

    यह डिफ़ॉल्ट रूप से RuntimeConfig पर सेट होता है. इससे यह तय होता है कि रनटाइम कॉन्फ़िग जनरेटर को किस मोड में चलाना है. RuntimeConfig , एसओएमई/आईपी और डायग्नोस्टिक्स के लिए, रनटाइम कॉन्फ़िग फ़ाइलें जनरेट करता है.

    RuntimeConfigPrebuilts, बिल्ड फ़ाइलें जनरेट करता है. इन फ़ाइलों में, पहले से बने मॉड्यूल शामिल होते हैं. इन मॉड्यूल का इस्तेमाल करके, RuntimeConfig वैरिएंट से जनरेट की गई फ़ाइलों को अन्य मॉड्यूल या वीएम इमेज में शामिल किया जा सकता है.

  • वैकल्पिक: --service-bundle-name <SERVICE_BUNDLE_NAME>

    यह आर्ग्युमेंट, उस सर्विस बंडल के बारे में बताता है जिस पर रनटाइम कॉन्फ़िग जनरेटर को लागू करना है.

  • वैकल्पिक: --package-name <PACKAGE_NAME>

    सर्विस बंडल के नाम वाले आर्ग्युमेंट के अलावा, इस आर्ग्युमेंट का इस्तेमाल करके, उस सर्विस बंडल के पैकेज के नाम के बारे में बताएं जिस पर रनटाइम कॉन्फ़िग जनरेटर को लागू करना है.

  • वैकल्पिक: --filegroup <FILEGROUP>

    RuntimeConfigPrebuilts मोड का इस्तेमाल करते समय, इसे तय करना ज़रूरी है.