סנכרון זמן

פלטפורמת AAOS Software Defined Vehicle ‏ (SDV) מגדירה מנגנונים סטנדרטיים לדיווח על מקורות זמן מיחידות בקרה אלקטרוניות (ECU) ומשטחים סטנדרטיים לחשיפת פרטי זמן במופעים של SDV. בדף הזה מפורטים פרטים והנחיות לגבי תקן ה-SDV.

ארכיטקטורת השעון

בפלטפורמת ה-SDV יש שני שעונים סטנדרטיים:

  • שעון UTC: זהו שעון סטנדרטי של זמן אוניברסלי מתואם. בדרך כלל, פרוטוקול SOME/IP מספק את זה מיחידות ECU לזמן הריצה של הפלטפורמה. תרחישי שימוש כוללים בדיקת תפוגה של אישורים, אבחון ו-V2X.

  • שעון מונוטוני של הרשת: זהו אות שעון מדויק מאוד שלא יורד, שמסופק מיחידות ECU. הארכיטקטורה הרחבה יותר של הרכב משתמשת בו כדי לוודא שהאירועים מתואמים. יחידות ה-ECU מספקות אותו לפלטפורמת ה-SDV באמצעות gPTP. השעון הזה נקרא גם שעון יציב.

לשעונים בפלטפורמת ה-SDV יש דרישות ארכיטקטוניות ספציפיות:

  • מסירת שעון: לכל מופע של מכונה וירטואלית יש גישה לאותו אות שעון מונוטוני שמסופק על ידי יחידות ה-ECU.

  • תקינות השעון: קלט השעון המונוטוני ברשת אמור להיות מקור מהימן לתיאום אירועים בין שירותים. ההגנה מפני נקודות חולשה אפשריות במערכת, כמו התקפות שידור חוזר או היפוך זמן, מבוססת על התקינות של השעון המונוטוני.

  • שימוש בהתראות: אסור להשתמש בממשקי API של שעון בפלטפורמת SDV לאירועים שמתרחשים בתדירות גבוהה (> 100 Hz) או עם זמן אחזור של < 10 ms בין התזמון לזמן האירוע. ממשקי API בתדירות גבוהה או עם זמן אחזור נמוך צריכים להשתמש במנהל התקן של ליבת המערכת.

Clock APIs

השעון המונוטוני של הרשת נחשף דרך ה-API הסטנדרטי clock_gettime(3):

// Network monotonic clock uses standard Linux API.
// This is represented as a dynamic clock in clock_gettime(3)
clock_gettime(clockid_t id, &timespec)

השעון הזה מסופק לכל מכונות ה-VM באמצעות מנגנון רשת PTP, והוא רשום כשעון דינמי למטרות clock_gettime(3).

השעון UTC מיוצג על ידי CLOCK_REALTIME ב-clock_gettime(3).

מנהל התקן אופציונלי

יצרני ציוד מקורי יכולים לחשוף חסימת מכשיר Linux כדי להוסיף מאפייני זמן. כדי לחשוף את החסימה, צריך לטפל בהרשאות באמצעות sepolicy:

# in device/OEM/target/sepolicy/time/file_contexts
/dev/sdvtime u:object_r:time_device:s0

יצרני ציוד מקורי (OEM) אחראים לפיתוח וליכולות של מנהל ההתקן המותאם אישית של מכשיר Linux, שחושף ממשקי API לבלוק של המכשיר.

התראות וקריאות חוזרות (callback)

התראות וקריאות חוזרות (callbacks) לרכיבי זמן ב-SDV הן יכולות של מרחב המשתמש (userland) שמסופקות על ידי יצרן הציוד המקורי (OEM). פלטפורמת ה-SDV לא מספקת ממשקי API ספציפיים לפונקציות האלה.

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

  • שינויים במצבי מקור הזמן הם אירועים בתדירות נמוכה, ולכן שירות OEM יכול לבדוק שינויים באמצעות סקר, למשל פעם בדקה.

  • יחידות ה-ECU מעבירות את הסטטוס של השעון ב-UTC ברשת, למשל באמצעות SOME/IP.

  • שירות OEM מפרסם נושאים ספציפיים של מנהרת נתונים כדי להציג את השינויים האלה למשתמשים רשומים.

  • יצרני ציוד מקורי (OEM) יכולים להתאים אישית את מדיניות ההרשאה לשירותים כדי לקבוע אילו שירותים יכולים להירשם לנושאים של Data Tunnel כדי להאזין לשינויים מהימנים במצב הזמן.

סטטוס שגיאה וטיפול בשגיאות

קודי השגיאה פועלים לפי המוסכמות של ממשקי ה-API הרגילים של Linux שמעורבים בתהליך, לדוגמה:

  • אם הפעולה clock_gettime() נכשלת, הפונקציה מחזירה -1 והערך errno מוגדר. המשמעות היא שפעולת השעון לא נתמכת או שמקור השעון הבסיסי לא מוכן.

  • אם הפונקציה fopen() נכשלת, היא מחזירה מצביע null והמשתנה errno מוגדר. המשמעות היא שמכשיר הבלוק לא זמין.

  • אם קריאה ל-ioctl() נכשלת, הפונקציה מחזירה -1 והערך של errno מוגדר. המשמעות היא שקוד הבקשה שצוין לא תואם לתגובה ממנהל ההתקן הבסיסי.