שילוב של SOME/IP עם SDV

כדי לשלב את תוכנת הביניים (middleware) מבוססת-השירות וניתנת להרחבה (SOME/IP) עם רכב מוגדר-תוכנה (SDV), צריך לפרוס ולהגדיר כמה רכיבים. כל מופע של ברוקר דורש הטמעה מקומית תואמת של מחסנית. במסמך הזה נסביר איך:

  • הגדרת פריסה של ברוקר יחיד
  • פריסת SOME/IP broker כמופע יחיד או כמופעים מרובים
  • פריסת סוכן של שפת נתונים אינטראקטיבית לשירותי רכב (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

פריסת ברוקר

אפשר לפרוס את מתווך SOME/IP כמופע יחיד או כמופע מרובה ב-SDV. אפשר לפצל דומיינים (או רשתות משנה) של SOME/IP למקרים שונים ועצמאיים. אפשר לעשות את זה כדי לאזן את העומס או כדי לשפר את הבידוד מטעמי אבטחה.

כל מופע צריך לעבד קבוצה נפרדת של נקודות קצה של SOME/IP ו-SDV. אי אפשר להשתמש בניתוב מיוחד או בסנכרון בין נציגים. הגדרה לא תקינה עלולה להוביל לפרסום כפול או לתוצאות לא עקביות של גילוי שירותים.

ספק שירותים אינטראקטיביים של נתוני כלי רכב

‫SOME/IP מקבל מטא-נתונים שנדרשים לתרגומים מסוכן VSIDL. צריך לפרוס את סוכן VSIDL באותו מכונה וירטואלית שבה פרוס מתווך SOME/IP.

כשמשתמשים באפשרות runtime-config-prebuilts variant, סוכן 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>... (אופציונלי)

    מציינת את הספריות של קובצי ה-proto התלויים מחוץ ל-catalog_path. כדי ליצור את Rust API עבור קובצי ה-proto שתלויים בו, כל ספרייה צריכה להכיל קובץ Android.bp. הקובץ הזה צריך לכלול rust_protobuf build target.

  • --variant <VARIANT> (אופציונלי)

    ערך ברירת המחדל הוא RuntimeConfig, והוא מציין את המצב שבו מחולל הגדרות זמן הריצה צריך לפעול. ‫RuntimeConfig יוצר קובצי תצורה של זמן ריצה עבור SOME/IP ואבחון.

    RuntimeConfigPrebuilts יוצר קובצי build. הקבצים האלה מכילים מודולים מוכנים מראש. אפשר להשתמש במודולים האלה כדי לכלול קבצים שנוצרו על ידי הווריאנט RuntimeConfig במודולים אחרים או בתמונת ה-VM.

  • --service-bundle-name <SERVICE_BUNDLE_NAME> (אופציונלי)

    ארגומנט שמציין את חבילת השירות שבה רוצים להשתמש כדי להחיל את מחולל הגדרות זמן הריצה.

  • --package-name <PACKAGE_NAME> (אופציונלי)

    בנוסף לארגומנט של שם חבילת השירות, משתמשים בארגומנט הזה כדי לציין את שם החבילה של חבילת השירות שעליה רוצים להחיל את מחולל הגדרות זמן הריצה.

  • --filegroup <FILEGROUP> (אופציונלי)

    חובה להגדיר את המאפיין הזה כשמשתמשים במצב RuntimeConfigPrebuilts.