پشته SOME/IP را پیاده سازی کنید

پشته SOME/IP منطق انتقال سطح پایین SOME/IP را از طریق رابط زبان تعریف رابط اندروید (AIDL) مدیریت می‌کند. این پشته رویدادهای SOME/IP و فراخوانی‌های رویه از راه دور (RPC) را ارسال و دریافت می‌کند. این سند مفاهیم زیر را شرح می‌دهد:

  • پیاده‌سازی مرجع: SDV یک پیاده‌سازی نمونه مرجع غیر تولیدی برای پشته SOME/IP ارائه می‌دهد.

  • رابط برنامه‌نویسی کاربردی (API) بایندر: رابط ISomeIpStack متدهایی را برای تعامل با یک نمونه از پشته SOME/IP تعریف می‌کند.

  • SELinux: یک پیکربندی نمونه SELinux برای پشته مرجع، امکان ارتباط بایندر و دسترسی جزئی به سیستم فایل را فراهم می‌کند.

در حالی که این پشته قالب سیمی SOME/IP را می‌خواند، محموله را به صورت حباب‌های دودویی مات رها می‌کند و محموله را به کارگزار SOME/IP ارسال می‌کند.

استاندارد 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

پیکربندی استقرار در محیط عملیاتی را برای پشته تعریف‌شده توسط OEM خود تعریف کنید. برای کسب اطلاعات بیشتر، به «ادغام SOME/IP با SDV» مراجعه کنید.

پیکربندی

پشته مرجع، پیکربندی کتابخانه vSomeIP را اعلام می‌کند. برای شرح ساختار پیکربندی به ساختار فایل پیکربندی مراجعه کنید. به عنوان بخشی از پیکربندی، پارامترهای SOME/IP SD، مانند آدرس چندپخشی و پورت مورد استفاده توسط پشته را مشخص می‌کنیم.

رابط برنامه‌نویسی کاربردی (API)

رابط ISomeIpStack در core_services/some_ip/aidl/google/sdv/someip تعریف شده است. رابط ISomeIpStack متدهایی را برای تعامل با یک نمونه پشته SOME/IP تعریف می‌کند و ویژگی‌های ضروری این موارد را فراهم می‌کند.

در دسترس بودن خدمات

  • register_availability_callback یک فراخوانی برای تغییرات در دسترس بودن سرویس ثبت می‌کند.

  • monitor_service به پشته دستور می‌دهد تا در دسترس بودن یک سرویس خاص را رصد کند.

  • unregister_availability_callback فراخوانی مربوط به دسترسی را از حالت ثبت خارج می‌کند.

  • on_sdv_service_availability نشان دهنده تغییر در دسترس پذیری سرویس SDV است.

فراخوانی‌های رویه از راه دور (RPC)

شما می‌توانید یک درخواست RPC با استفاده از دستور زیر ارسال کنید:

  • rpc_transact برای انتظار پاسخ
  • rpc_oneway برای منتظر نماندن برای پاسخ

برای مدیریت درخواست‌های RPC:

  • register_rpc_request_callback یک فراخوانی برای درخواست‌های RPC ورودی ثبت می‌کند.

  • unregister_rpc_request_callback فراخوانی درخواست RPC را از حالت ثبت خارج می‌کند.

اطلاع رسانی رویداد

  • register_event_notification_callback یک فراخوانی برای اعلان‌های رویداد مشترک ثبت می‌کند.

  • unregister_event_notification_callback فراخوانی اعلان رویداد را از حالت ثبت خارج می‌کند.

  • on_sdv_topic_availability نشان دهنده تغییر در دسترس بودن موضوع SDV است.

  • subscribe شدن در یک رویداد خاص از یک گروه رویداد.

  • unsubscribe لغو اشتراک از یک رویداد خاص.

  • publish رویدادی با بار داده شده را منتشر می‌کند.

SELinux

پوشه device/google/sdv/sdv_core_base/sepolicy/samples/vendor/ شامل یک نمونه پیکربندی SELinux برای پشته مرجع است:

  • sdv_someip_stack_default.te نوع sdv_someip_stack_default را تعریف کرده و آن را به ویژگی‌ها و زمینه‌ها نگاشت می‌کند.

  • file_contexts پوشه‌های باینری و داده‌ای را به contextهای مناسب نگاشت می‌کند.

این پیکربندی، ارتباط Binder بین استک و واسط را فعال می‌کند و امکان دسترسی به ویژگی‌های شبکه و دسترسی جزئی به سیستم فایل دستگاه را فراهم می‌کند.