כדי לשלב את תוכנת הביניים (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_protobufbuild target.--variant <VARIANT>(אופציונלי)ערך ברירת המחדל הוא
RuntimeConfig, והוא מציין את המצב שבו מחולל הגדרות זמן הריצה צריך לפעול. RuntimeConfigיוצר קובצי תצורה של זמן ריצה עבור SOME/IP ואבחון.
RuntimeConfigPrebuiltsיוצר קובצי build. הקבצים האלה מכילים מודולים מוכנים מראש. אפשר להשתמש במודולים האלה כדי לכלול קבצים שנוצרו על ידי הווריאנטRuntimeConfigבמודולים אחרים או בתמונת ה-VM.--service-bundle-name <SERVICE_BUNDLE_NAME>(אופציונלי)ארגומנט שמציין את חבילת השירות שבה רוצים להשתמש כדי להחיל את מחולל הגדרות זמן הריצה.
--package-name <PACKAGE_NAME>(אופציונלי)בנוסף לארגומנט של שם חבילת השירות, משתמשים בארגומנט הזה כדי לציין את שם החבילה של חבילת השירות שעליה רוצים להחיל את מחולל הגדרות זמן הריצה.
--filegroup <FILEGROUP>(אופציונלי)חובה להגדיר את המאפיין הזה כשמשתמשים במצב
RuntimeConfigPrebuilts.