همگام سازی زمان

پلتفرم AAOS Software Defined Vehicle (SDV) مکانیزم‌های استانداردی را برای گزارش منبع زمان از واحدهای کنترل الکترونیکی (ECU) و سطوح استاندارد برای نمایش اطلاعات زمان در نمونه‌های SDV تعریف می‌کند. این صفحه جزئیات و راهنمایی‌هایی را برای استاندارد SDV ارائه می‌دهد.

معماری ساعت

پلتفرم SDV دو ساعت استاندارد دارد:

  • ساعت UTC: این ساعت استاندارد هماهنگ جهانی است. SOME/IP معمولاً این را از ECUها به زمان اجرای پلتفرم ارائه می‌دهد. موارد استفاده شامل تازگی گواهی، تشخیص و V2X است.

  • کلاک یکنواخت شبکه: این یک سیگنال کلاک غیرکاهشی و بسیار دقیق است که از ECU ها ارائه می‌شود و معماری گسترده‌تر خودرو از آن برای اطمینان از هماهنگی رویدادها استفاده می‌کند. ECU ها این را از طریق gPTP به پلتفرم SDV ارائه می‌دهند. این کلاک همچنین به عنوان کلاک ثابت شناخته می‌شود.

ساعت‌ها در پلتفرم SDV الزامات معماری خاصی دارند:

  • تحویل کلاک: هر نمونه ماشین مجازی به همان سیگنال کلاک یکنواخت ارائه شده توسط ECUها دسترسی پیدا می‌کند.

  • یکپارچگی ساعت: انتظار می‌رود ورودی ساعت یکنواخت شبکه، منبع قابل اعتمادی برای هماهنگی رویدادها در بین سرویس‌ها باشد. دفاع در برابر آسیب‌پذیری‌های احتمالی سیستم مانند حملات بازپخش یا وارونگی زمان بر اساس یکپارچگی ساعت یکنواخت است.

  • استفاده از هشدار: APIهای ساعت پلتفرم SDV نباید برای رویدادهایی با فرکانس وقوع بالا (> 100 هرتز) یا تأخیر کمتر از 10 میلی‌ثانیه بین زمان‌بندی و زمان رویداد استفاده شوند. APIهای فرکانس بالا یا تأخیر کم باید از یک درایور هسته استفاده کنند.

API های ساعت

ساعت یکنواخت شبکه از طریق 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)

این ساعت از طریق مکانیزم شبکه PTP به تمام ماشین‌های مجازی ارائه می‌شود و به عنوان یک ساعت پویا برای اهداف clock_gettime(3) ثبت می‌شود.

ساعت UTC توسط CLOCK_REALTIME در clock_gettime(3) نمایش داده می‌شود.

درایور دستگاه اختیاری

تولیدکنندگان اصلی تجهیزات (OEM) این گزینه را دارند که یک بلوک دستگاه لینوکس را برای ویژگی‌های زمانی اضافی در معرض نمایش قرار دهند. این کار را با مدیریت مجوزها از طریق sepolicy انجام دهید:

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

تولیدکنندگان اصلی تجهیزات (OEM) مسئول توسعه و قابلیت‌های درایور دستگاه سفارشی لینوکس هستند که APIها را در اختیار بلوک دستگاه قرار می‌دهد.

اعلان‌ها و تماس‌های برگشتی

اعلان‌ها و فراخوانی‌های مجدد برای اجزای زمان در SDV، قابلیت‌هایی در فضای کاربری هستند که توسط تولیدکننده اصلی (OEM) ارائه می‌شوند. پلتفرم SDV رابط‌های برنامه‌نویسی کاربردی (API) خاصی برای این توابع ارائه نمی‌دهد.

باید حداکثر یک سرویس OEM به ازای هر ماشین مجازی وجود داشته باشد که نیاز به قابلیت همگام‌سازی زمان داشته باشد و تمام تغییرات زمانی مربوطه را که باید مانیتور شوند، مدیریت کند. به عنوان مثال، وقتی وضعیت مورد اعتماد برای منبع زمان فعلی تغییر می‌کند:

  • تغییرات در وضعیت منبع زمان به عنوان رویدادهایی با فرکانس پایین انتظار می‌رود، بنابراین یک سرویس OEM می‌تواند تغییرات را از طریق نمونه‌برداری، مثلاً یک بار در دقیقه، بررسی کند.

  • ECUها وضعیت وضعیت قابل اعتماد ساعت UTC را از طریق شبکه، مثلاً از طریق SOME/IP، مخابره می‌کنند.

  • یک سرویس OEM موضوعات خاص تونل داده را منتشر می‌کند تا این تغییرات را برای مشترکین آشکار کند.

  • تولیدکنندگان اصلی تجهیزات (OEM) سیاست مجوزدهی را برای سرویس‌ها سفارشی می‌کنند تا مشخص شود کدام سرویس‌ها می‌توانند در این مباحث تونل داده مشترک شوند تا به تغییرات وضعیت زمان مورد اعتماد گوش دهند.

وضعیت خطا و نحوه مدیریت آن

کدهای خطا از قراردادهای APIهای استاندارد لینوکس پیروی می‌کنند، برای مثال:

  • اگر clock_gettime() با شکست مواجه شود، مقدار -1 را برمی‌گرداند و errno تنظیم می‌شود؛ این نشان می‌دهد که عملیات ساعت پشتیبانی نمی‌شود یا منبع ساعت اصلی آماده نیست.

  • اگر تابع fopen() با شکست مواجه شود، یک اشاره‌گر null برمی‌گرداند و errno تنظیم می‌شود؛ این نشان می‌دهد که دستگاه بلوک در دسترس نیست.

  • اگر فراخوانی ioctl() با شکست مواجه شود، این تابع مقدار -1 را برمی‌گرداند و errno تنظیم می‌شود؛ این بدان معناست که کد درخواست مشخص شده، پاسخی مطابق با درایور مربوطه ندارد.