AAOS সফটওয়্যার ডিফাইন্ড ভেহিকেল (SDV) প্ল্যাটফর্মটি ইলেকট্রনিক কন্ট্রোল ইউনিট (ECU) থেকে সময়ের উৎস জানানোর জন্য আদর্শ পদ্ধতি এবং SDV ইনস্ট্যান্স- এ সময়ের তথ্য প্রকাশের জন্য আদর্শ মাধ্যম নির্ধারণ করে। এই পৃষ্ঠাটি SDV স্ট্যান্ডার্ডের বিস্তারিত বিবরণ এবং নির্দেশিকা প্রদান করে।
ঘড়ির স্থাপত্য
SDV প্ল্যাটফর্মে দুটি স্ট্যান্ডার্ড ক্লক রয়েছে:
UTC ক্লক: এটি হলো স্ট্যান্ডার্ড কোঅর্ডিনেটেড ইউনিভার্সাল টাইম ক্লক। SOME/IP সাধারণত ECU থেকে প্ল্যাটফর্ম রানটাইমে এটি সরবরাহ করে থাকে। এর ব্যবহারগুলোর মধ্যে রয়েছে সার্টিফিকেটের সতেজতা, ডায়াগনস্টিকস এবং V2X।
নেটওয়ার্ক মনোটোনিক ক্লক: এটি ECU থেকে সরবরাহ করা একটি অ-হ্রাসমান, অত্যন্ত নির্ভুল ক্লক সিগন্যাল যা গাড়ির সামগ্রিক কাঠামো বিভিন্ন ইভেন্টের সমন্বয় নিশ্চিত করতে ব্যবহার করে। ECU-গুলো gPTP-এর মাধ্যমে SDV প্ল্যাটফর্মে এটি সরবরাহ করে। এই ক্লকটি স্টেডি ক্লক নামেও পরিচিত।
SDV প্ল্যাটফর্মের ঘড়িগুলোর নির্দিষ্ট স্থাপত্যগত আবশ্যকতা রয়েছে:
ক্লক ডেলিভারি: প্রতিটি ভিএম ইনস্ট্যান্স ইসিইউ (ECU) দ্বারা সরবরাহকৃত একই মনোটোনিক ক্লক সিগন্যাল ব্যবহারের সুযোগ পায়।
ক্লক ইন্টিগ্রিটি: বিভিন্ন সার্ভিসের মধ্যে ইভেন্ট সমন্বয়ের জন্য নেটওয়ার্ক মনোটোনিক ক্লক ইনপুট একটি নির্ভরযোগ্য উৎস হিসেবে কাজ করে বলে আশা করা হয়। রিপ্লে অ্যাটাক বা টাইম ইনভার্সনের মতো সম্ভাব্য সিস্টেম দুর্বলতার বিরুদ্ধে প্রতিরক্ষা এই মনোটোনিক ক্লকের অখণ্ডতার উপর ভিত্তি করে গড়ে ওঠে।
অ্যালার্ম ব্যবহার: উচ্চ-ফ্রিকোয়েন্সি (> 100 Hz) সম্পন্ন ইভেন্ট অথবা শিডিউলিং এবং ইভেন্টের সময়ের মধ্যে < 10 ms ল্যাটেন্সির ক্ষেত্রে SDV প্ল্যাটফর্ম ক্লক API ব্যবহার করা উচিত নয়। উচ্চ-ফ্রিকোয়েন্সি বা কম-ল্যাটেন্সি সম্পন্ন API-গুলোর জন্য কার্নেল ড্রাইভার ব্যবহার করা উচিত।
ঘড়ি এপিআই
নেটওয়ার্ক মনোটোনিক ক্লকটি স্ট্যান্ডার্ড clock_gettime(3) API এর মাধ্যমে প্রকাশ করা হয়:
// Network monotonic clock uses standard Linux API.
// This is represented as a dynamic clock in clock_gettime(3)
clock_gettime(clockid_t id, ×pec)
এই ঘড়িটি একটি PTP নেটওয়ার্ক পদ্ধতির মাধ্যমে সমস্ত VM-এ সরবরাহ করা হয় এবং clock_gettime(3) উদ্দেশ্যে একটি ডাইনামিক ঘড়ি হিসাবে নিবন্ধিত করা হয়।
clock_gettime(3) -এ UTC ঘড়িকে CLOCK_REALTIME দ্বারা প্রকাশ করা হয়।
ঐচ্ছিক ডিভাইস ড্রাইভার
OEM-দের কাছে অতিরিক্ত সময় প্রোপার্টিজের জন্য একটি লিনাক্স ডিভাইস ব্লক এক্সপোজ করার অপশন রয়েছে। sepolicy-এর মাধ্যমে পারমিশন হ্যান্ডলিং করে এটি এক্সপোজ করুন:
# in device/OEM/target/sepolicy/time/file_contexts
/dev/sdvtime u:object_r:time_device:s0
ডিভাইস ব্লকে এপিআই (API) উন্মুক্তকারী কাস্টম লিনাক্স ডিভাইস ড্রাইভারের উন্নয়ন ও সক্ষমতার জন্য ওইএম (OEM)-রা দায়ী।
বিজ্ঞপ্তি এবং কলব্যাক
SDV-তে টাইম কম্পোনেন্টের জন্য নোটিফিকেশন এবং কলব্যাক হলো ইউজারল্যান্ড সক্ষমতা, যা OEM দ্বারা সরবরাহ করা হয়। SDV প্ল্যাটফর্ম এই ফাংশনগুলোর জন্য কোনো নির্দিষ্ট API প্রদান করে না।
প্রতিটি ভিএম-এর জন্য সর্বোচ্চ একটি ওইএম (OEM) সার্ভিস থাকা উচিত, যেটির টাইম সিঙ্ক কার্যকারিতা প্রয়োজন এবং যা পর্যবেক্ষণের জন্য সমস্ত প্রাসঙ্গিক সময়ের পরিবর্তন পরিচালনা করবে। উদাহরণস্বরূপ, যখন বর্তমান টাইম সোর্সের জন্য বিশ্বস্ত অবস্থা পরিবর্তিত হয়:
টাইম সোর্স স্টেটের পরিবর্তনগুলো কম ফ্রিকোয়েন্সির ইভেন্ট হিসেবে প্রত্যাশিত, তাই একটি OEM সার্ভিস পোলিংয়ের মাধ্যমে, উদাহরণস্বরূপ, প্রতি মিনিটে একবার, পরিবর্তনগুলো পরীক্ষা করতে পারে।
ECU-গুলি নেটওয়ার্কের মাধ্যমে, যেমন SOME/IP-এর উপর দিয়ে, UTC ঘড়ির নির্ভরযোগ্য অবস্থার স্থিতি জ্ঞাপন করে।
একটি OEM পরিষেবা গ্রাহকদের কাছে এই পরিবর্তনগুলি তুলে ধরার জন্য নির্দিষ্ট ডেটা টানেল টপিক প্রকাশ করে।
কোন কোন সার্ভিস বিশ্বস্ত সময়ভিত্তিক অবস্থার পরিবর্তন শোনার জন্য এই ডেটা টানেল টপিকগুলিতে সাবস্ক্রাইব করতে পারবে, তা নির্ধারণ করতে OEM-রা সার্ভিসগুলির জন্য অনুমোদন নীতি কাস্টমাইজ করে।
ত্রুটির অবস্থা এবং তার সমাধান
এরর কোডগুলো সংশ্লিষ্ট স্ট্যান্ডার্ড লিনাক্স এপিআই-এর নিয়মকানুন অনুসরণ করে, যেমন:
যদি
clock_gettime()ব্যর্থ হয়, তাহলে এটি-1রিটার্ন করে এবংerrnoসেট করা হয়; এর অর্থ হলো ক্লক অপারেশনটি সমর্থিত নয় অথবা অন্তর্নিহিত ক্লক সোর্সটি প্রস্তুত নয়।যদি
fopen()ব্যর্থ হয়, তবে এটি একটি null পয়েন্টার রিটার্ন করে এবংerrnoসেট করা হয়; এর অর্থ হলো ব্লক ডিভাইসটি উপলব্ধ নয়।যদি একটি
ioctl()কল ব্যর্থ হয়, তাহলে এটি-1রিটার্ন করে এবংerrnoসেট করা হয়; এর অর্থ হলো, নির্দিষ্ট অনুরোধ কোডটির জন্য অন্তর্নিহিত ড্রাইভারের কাছ থেকে কোনো উপযুক্ত প্রতিক্রিয়া পাওয়া যায়নি।