SDV-এর সাথে কিছু/আইপি সংহত করুন

বিভিন্ন উপাদান স্থাপন ও কনফিগার করার মাধ্যমে স্কেলেবল সার্ভিস-ওরিয়েন্টেড মিডলওয়্যার ওভার আইপি ( SOME/IP )-কে সফটওয়্যার ডিফাইন্ড ভেহিকল (SDV)-এর সাথে একীভূত করুন। প্রতিটি ব্রোকার ইনস্ট্যান্সের জন্য একটি সংশ্লিষ্ট স্থানীয় স্ট্যাক ইমপ্লিমেন্টেশন প্রয়োজন। এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কীভাবে:

  • একটি একক ব্রোকার ডেপ্লয়মেন্ট কনফিগার করুন
  • SOME/IP ব্রোকারটিকে একক বা একাধিক ইনস্ট্যান্স হিসেবে স্থাপন করুন।
  • যানবাহন পরিষেবা ইন্টারেক্টিভ ডেটা ল্যাঙ্গুয়েজ (VSIDL) এজেন্ট স্থাপন করুন
  • vsidl_rc_generator এর সাথে Soong ব্যবহার করুন

উদাহরণ কনফিগারেশন

SDV-এর উদাহরণগুলো, যেমন Cuttlefish ভার্চুয়াল অ্যান্ড্রয়েড ডিভাইস 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 এজেন্ট থেকে অনুবাদের জন্য প্রয়োজনীয় মেটাডেটা সংগ্রহ করে। আপনাকে অবশ্যই SOME/IP ব্রোকারের সাথে একই VM-এ VSIDL এজেন্টটি স্থাপন করতে হবে।

runtime-config-prebuilts ভ্যারিয়েন্ট অপশনটির সাথে ব্যবহার করা হলে, VSIDL এজেন্ট একটি Android.bp ফাইল তৈরি করতে পারে। এই ফাইলটিতে প্রি-বিল্ট রুলস থাকে, যা প্রাসঙ্গিক রানটাইম কনফিগারেশন বিল্ড ও ডিপ্লয় করে।

সুং

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 মোড ব্যবহার করার সময় এটি অবশ্যই সংজ্ঞায়িত করতে হবে।