הטמעה של מחסנית SOME/IP

מערך התעבורה SOME/IP מנהל את פרוטוקול החיבור SOME/IP ברמה נמוכה ואת הלוגיקה של הרשת דרך ממשק Android Interface Definition Language‏ (AIDL) (ISomeIpStack). המערך הזה שולח ומקבל אירועי SOME/IP וקריאות לפרוצדורות מרוחקות (RPC). שותפים יכולים לשלב הטמעות מותאמות אישית של מחסנית SOME/IP דרך ISomeIpStack, או להשתמש בהטמעה לדוגמה שכלולה ב-COVESA vsomeip, ספרייה בקוד פתוח. בדף הזה מתוארים המושגים הבאים:

  • הטמעה לדוגמה: SDV מספקת הטמעה לדוגמה שאינה מיועדת לסביבת ייצור עבור סטאק SOME/IP.

  • Binder API: הממשק ISomeIpStack מגדיר שיטות לאינטראקציה עם מופע של מחסנית SOME/IP.

  • SELinux: דוגמה להגדרת SELinux עבור מחסנית ההפניה מאפשרת תקשורת בין רכיבי binder וגישה גרנולרית למערכת הקבצים.

הסטאק הזה קורא את פורמט החוט של SOME/IP, אבל הוא משאיר את המטען הייעודי כבלובים בינאריים אטומים ומעביר את המטען הייעודי ל-SOME/IP broker.

תקן SOME/IP לא מספק הגדרה של מחסנית או של שכבת API של מחסנית. ‫SDV מספק API של AIDL שפועל במסגרת ההגדרות המוכרות של התקן, ונדרש קוד מינימלי כדי להתאים את המערכות הקיימות.

ממשק ה-API הזה מאפשר לכם לבחור הטמעות שונות של הסטאק ומפשט את השילוב של הסטאק עם רכיבים אחרים במערכת.

הטמעה לדוגמה

‫SDV מספקת יישום לדוגמה של הפניה שאינו מיועד לסביבת ייצור עבור מחסנית SOME/IP, והיא מורכבת ממעטפת דקה מעל ספריית הקוד הפתוח COVESA vsomeip. המערכת פורסת את מחסנית ההפניה רק ליעדים sdv_core_cf ו-sdv_core_arm64, ו-init.rc מפעיל אותה במכונה הווירטואלית עם CID=3.

on property:dev.bootcomplete=1 && property:ro.sdv.vsock_local_cid=3
    start sdv_someip_stack_agent

מגדירים את פריסת הייצור עבור מחסנית (stack) שהוגדרה על ידי יצרן ציוד מקורי (OEM). מידע נוסף זמין במאמר בנושא שילוב של SOME/IP עם SDV.

הגדרות אישיות

מערך ההפניות מכריז על הגדרה לספריית vSomeIP. במאמר מבנה קובץ ההגדרות מופיע תיאור של מבנה ההגדרות. כחלק מההגדרה, קובץ ההגדרה מציין פרמטרים של SOME/IP SD, כמו כתובת מולטיקאסט והיציאה שבה משתמשת המערכת.

Binder API

הממשק של ISomeIpStack מוגדר ב-core_services/some_ip/aidl/google/sdv/someip. ממשק ISomeIpStack מגדיר שיטות לאינטראקציה עם מופע של מחסנית SOME/IP ומספק מאפיינים חיוניים לפריטים האלה.

זמינות של שירות

  • register_availability_callback רישום של קריאה חוזרת לשינויים בזמינות השירות.

  • monitor_service הנחיה למערכת לעקוב אחרי הזמינות של שירות ספציפי.

  • unregister_availability_callback Unregisters the availability callback.

  • on_sdv_service_availability מציין שינוי בזמינות של שירות SDV.

קריאות לפרוצדורות מרוחקות (RPC)

אפשר לשלוח בקשת RPC עם:

  • rpc_transact להמתין לתגובה
  • rpc_oneway כדי לא לחכות לתגובה

לטיפול בבקשות RPC:

  • register_rpc_request_callback רושם קריאה חוזרת (callback) לבקשות RPC נכנסות.

  • unregister_rpc_request_callback Unregisters the RPC request callback.

התראה לגבי אירוע

  • register_event_notification_callback רושם קריאה חוזרת (callback) להתראות על אירועים שהמשתמש רשום אליהם.

  • unregister_event_notification_callback ביטול הרישום של פונקציית הקריאה החוזרת של ההתראה לגבי אירוע.

  • on_sdv_topic_availability מציין שינוי בזמינות של נושא SDV.

  • subscribe נרשם לאירוע ספציפי מתוך קבוצת אירועים.

  • unsubscribe ביטול ההרשמה לאירוע ספציפי.

  • publish Publishes an event with a given payload.

SELinux

התיקייה device/google/sdv/sdv_core_base/sepolicy/samples/vendor/ מכילה דוגמה להגדרת SELinux עבור מחסנית ההפניה:

  • sdv_someip_stack_default.te מגדיר את הסוג sdv_someip_stack_default וממפה אותו למאפיינים ולהקשרים.

  • file_contexts מיפוי של תיקיות בינאריות ונתונים של מפות להקשרים המתאימים.

ההגדרה מאפשרת תקשורת של Binder בין מחסנית התקשורת לבין הברוקר, ומאפשרת גישה לאיכויות של הרשת ולגישה גרנולרית למערכת הקבצים של המכשיר.