مزامنة الوقت

تحدّد منصة المركبات التي يتم التحكّم فيها بالبرامج (SDV) في نظام التشغيل Android Automotive OS (AAOS) آليات عادية للإبلاغ عن مصدر الوقت من وحدات التحكّم الإلكترونية (ECU) ومساحات عرض عادية لعرض معلومات الوقت في مثيلات SDV. تقدّم هذه الصفحة تفاصيل وإرشادات بشأن معيار SDV.

بنية الساعة

تتضمّن منصة SDV ساعتَين عاديتَين:

  • الساعة بالتوقيت العالمي المنسَّق (UTC): هي الساعة العادية بالتوقيت العالمي المنسَّق. عادةً ما يوفّر بروتوكول SOME/IP هذه الساعة من وحدات التحكّم الإلكترونية إلى وقت تشغيل المنصة. تشمل حالات الاستخدام صلاحية الشهادات والتشخيصات والاتصالات بين المركبات والبنية التحتية (V2X).

  • الساعة الرتيبة للشبكة: هي إشارة ساعة غير متناقصة وعالية الدقة يتم توفيرها من وحدات التحكّم الإلكترونية، وتستخدمها بنية المركبة الأوسع نطاقًا لضمان تنسيق الأحداث. توفّر وحدات التحكّم الإلكترونية هذه الساعة لمنصة SDV من خلال بروتوكول gPTP. تُعرف هذه الساعة أيضًا باسم الساعة الثابتة.

تتضمّن الساعات في منصة SDV متطلبات معينة في البنية:

  • توصيل الساعة: يحصل كل مثيل من الآلة الافتراضية على إشارة الساعة الرتيبة نفسها التي توفّرها وحدات التحكّم الإلكترونية.

  • سلامة الساعة: من المتوقّع أن يكون إدخال الساعة الرتيبة للشبكة مصدرًا موثوقًا به لتنسيق الأحداث بين الخدمات. تستند الحماية من الثغرات المحتملة في النظام، مثل هجمات إعادة التشغيل أو عكس الوقت، إلى سلامة الساعة الرتيبة.

  • استخدام المنبّه: يجب عدم استخدام واجهات برمجة التطبيقات الخاصة بساعة منصة SDV للأحداث التي تتكرّر بشكل كبير (> 100 هرتز) أو التي يكون فيها وقت الاستجابة بين الجدولة ووقت الحدث أقل من 10 ملّي ثانية. يجب أن تستخدم واجهات برمجة التطبيقات ذات التردد العالي أو وقت الاستجابة المنخفض برنامج تشغيل في النواة.

واجهات برمجة التطبيقات الخاصة بالساعة

يتم عرض الساعة الرتيبة للشبكة من خلال واجهة برمجة التطبيقات العادية 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)

يتم توفير هذه الساعة من خلال آلية شبكة PTP لجميع الآلات الافتراضية، ويتم تسجيلها كساعة ديناميكية لأغراض clock_gettime(3).

يتم تمثيل ساعة التوقيت العالمي المنسَّق من خلال CLOCK_REALTIME في clock_gettime(3).

برنامج تشغيل الجهاز الاختياري

لدى المصنّعين الأصليين للأجهزة خيار عرض وحدة تخزين جهاز Linux لخصائص وقت إضافية. يمكن عرض ذلك من خلال معالجة الأذونات عبر sepolicy:

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

المصنّعون الأصليون للأجهزة مسؤولون عن تطوير برنامج تشغيل جهاز Linux المخصّص وإمكاناته، والذي يعرض واجهات برمجة التطبيقات لوحدة تخزين الجهاز.

الإشعارات وعمليات معاودة الاتصال

الإشعارات وعمليات معاودة الاتصال لمكوّنات الوقت في SDV هي إمكانات مساحة المستخدم التي يوفّرها المصنّع الأصلي للجهاز. لا توفّر منصة SDV واجهات برمجة تطبيقات محدّدة لهذه الوظائف.

يجب أن يكون هناك خدمة واحدة كحد أقصى من المصنّع الأصلي للجهاز لكل آلة افتراضية تتطلّب وظيفة مزامنة الوقت التي تعالج جميع التغييرات ذات الصلة في الوقت التي يجب مراقبتها. في ما يلي مثال على تغيير الحالة الموثوق بها لمصدر الوقت الحالي:

  • من المتوقّع أن تكون التغييرات في حالات مصدر الوقت أحداثًا منخفضة التردد، لذا يمكن لخدمة المصنّع الأصلي للجهاز التحقّق من التغييرات من خلال الاستطلاع، مثلاً مرة واحدة في الدقيقة.

  • تُرسِل وحدات التحكّم الإلكترونية حالة الساعة بالتوقيت العالمي المنسَّق الموثوق بها عبر الشبكة، مثلاً عبر بروتوكول SOME/IP.

  • تنشر خدمة المصنّع الأصلي للجهاز مواضيع محدّدة في "نفق البيانات" لعرض هذه التغييرات على المشتركين.

  • يخصّص المصنّعون الأصليون للأجهزة سياسة التفويض للخدمات لتحديد الخدمات التي يمكنها الاشتراك في مواضيع "نفق البيانات" هذه للاستماع إلى التغييرات في حالة الوقت الموثوق به.

حالة الخطأ ومعالجته

تتّبع رموز الخطأ اصطلاحات واجهات برمجة تطبيقات Linux العادية المعنيّة، مثلاً:

  • إذا تعذّر تنفيذ clock_gettime()، يتم عرض -1 ويتم ضبط errno، ما يعني أنّ عملية الساعة غير متوافقة أو أنّ مصدر الساعة الأساسي غير جاهز.

  • إذا تعذّر تنفيذ fopen()، يتم عرض مؤشر فارغ ويتم ضبط errno، ما يعني أنّ جهاز وحدة التخزين غير متاح.

  • إذا تعذّر تنفيذ طلب ioctl()، يتم عرض -1 ويتم ضبط errno، ما يعني أنّ رمز الطلب المحدّد ليس له استجابة مطابقة من برنامج التشغيل الأساسي.