कार उद्योग, कई डिसेंट्रलाइज़्ड कंप्यूट यूनिट के आर्किटेक्चर से ऐसे आर्किटेक्चर की ओर बढ़ रहा है जो कई फ़ंक्शन को कुछ सेंट्रलाइज़्ड कंप्यूट यूनिट में जोड़ता है. इससे ओवर द एयर अपडेट जैसी नई सुविधाएं मिलती हैं.
AAOS SDV, समाधान देने के लिए मौजूदा Android सिस्टम और इन्फ़्रास्ट्रक्चर का इस्तेमाल करता है. इसके अलावा, ओईएम ऐसे समाधानों की तलाश में हैं जो क्लाउड में भी काम कर सकें. इससे, शुरुआती डेवलपमेंट में मदद मिलती है और टेस्टिंग के नए विकल्प मिलते हैं.
डिज़ाइन
पहली इमेज. SDV कोर का आर्किटेक्चर.
SDV Core के लिए AAOS (SDV Core), Android पर आधारित एक ऑपरेटिंग सिस्टम है. यह एम्बेड किया गया है. इसलिए, यह Android के JVM स्टैक को लागू नहीं करता. इसके बजाय, सिस्टम की सभी सुविधाओं को नेटिव तौर पर डेवलप किया जाता है.
SDV Core को मुख्य रूप से वर्चुअलाइज़्ड एनवायरमेंट के लिए डेवलप किया गया है. साथ ही, डिज़ाइन से जुड़े कुछ फ़ैसले इस इंटिग्रेशन को ध्यान में रखकर लिए गए हैं. हालांकि, SDV Core को नेटिव तौर पर चलाया जा सकता है. हालांकि, इसके लिए अन्य Android रिलीज़ की तुलना में, इंटिग्रेशन से जुड़ा ज़्यादा काम करना पड़ता है.
SDV Core को स्थानीय डिस्ट्रिब्यूटेड सिस्टम के लिए डिज़ाइन किया गया है. उदाहरण के लिए, यह मानता है कि SDV Core (या डेरिवेटिव) के कई इंस्टेंस, एक ही चिप या कई सिस्टम पर एक-दूसरे के बगल में चलते हैं. साथ ही, वे नेटवर्क कनेक्शन के ज़रिए कम्यूनिकेट कर सकते हैं. इसलिए, सिस्टम आर्किटेक्चर का मुख्य पहलू यह है कि फ़ंक्शन को ऐसी सेवाओं के तौर पर लागू किया जाए जिन्हें किसी भी इंस्टेंस पर होस्ट किया जा सकता है.
SDV Core, कार में काम करने वाली सुविधाओं को डेवलप करने के लिए ज़रूरी सुविधाओं का सबसे छोटा सेट है. कोई सामान्य सेवा कुछ सिग्नल पाने के बाद, उन्हें प्रोसेस करती है और नतीजे को अन्य सेवाओं के साथ शेयर करती है. स्कोप को सीमित करने का मकसद यह है कि SDV Core, अलग-अलग तरह के एसओसी (सिस्टम-ऑन-ए-चिप) पर काम कर सके. इनमें ऐसे एसओसी भी शामिल हैं जिनमें अडवांस इंजन नहीं होते. इससे लागत भी कम होती है.
ज़्यादा जानकारी वाला डिज़ाइन
दूसरी इमेज. SDV Core के आर्किटेक्चर के बारे में पूरी जानकारी.
SDV Core, Android से लिया गया है. इसलिए, इसका आर्किटेक्चर Android के साथ ज़्यादा से ज़्यादा अलाइन करने की कोशिश करता है. इसका मतलब यह है कि SDV Core, Android से GKI, ड्राइवर, HAL, और कोर लाइब्रेरी का इस्तेमाल करता है. साथ ही, सेवा के आर्किटेक्चर के लिए ज़रूरी कॉम्पोनेंट जोड़ता है.
यहां दिए गए सेक्शन में, सिस्टम कॉम्पोनेंट के बारे में ज़्यादा जानकारी दी गई है.
होस्ट एनवायरमेंट और वर्चुअलाइज़ेशन
SDV Core को इस तरह से डेवलप किया गया है कि यह वर्चुअल एनवायरमेंट में काम करेगा. इसलिए, हम होस्ट एनवायरमेंट के बारे में कुछ अनुमान लगाते हैं:
होस्ट एनवायरमेंट में ऐसा हाइपरवाइज़र चलता है जो Virtio डिवाइसों के साथ काम करता है. इसके अलावा, हाइपरवाइज़र को ईथरनेट या vsock, पावर स्टेट, और ब्लॉक डिवाइसों को लागू करना होगा. इसके अलावा, हाइपरवाइज़र को Android/Linux चलाने की सुविधा देनी होगी.
हार्डवेयर के बारे में, SDV Core यह मानता है कि सीपीयू और एमएमयू में हार्डवेयर वर्चुअलाइज़ेशन की सुविधा है. साथ ही, सिस्टम को ईथरनेट से कनेक्ट किया गया है. सिस्टम में जीपीयू, आईपीयू, सीएसआई, मीडिया इंजन, डिसप्ले या अन्य ऑटोमोटिव कम्यूनिकेशन बसें (जैसे, CAN, LIN) होना ज़रूरी नहीं है.
Android Base
SDV Core, Android पर आधारित है. हालांकि, यह सिस्टम को ज़रूरी सिस्टम फ़ंक्शन तक सीमित कर देता है. साथ ही, SDV रनटाइम एनवायरमेंट जोड़ता है. इसका मतलब है कि एसडीवी, जीकेआई, नेटिव सिस्टम सेवाओं (उदाहरण के लिए, adbd और logd) और सिस्टम फ़ंक्शन का इस्तेमाल करता है. हालांकि, इसमें जेवीएम और जेवीएम पर आधारित सेवाएं या सिस्टम ऐप्लिकेशन शामिल नहीं हैं. साथ ही, इसमें जेवीएम के लिए लागू की गई सुविधाएं भी शामिल नहीं हैं.
इसका यह भी मतलब है कि एसडीवी, Android की अपडेट करने की रणनीति और पार्टीशन लेआउट के हिसाब से काम करेगा. इसमें सुरक्षा से जुड़ी ज़रूरतें एक जैसी होती हैं, लेकिन इसमें जीयूआई नहीं होता.
GKI, ड्राइवर, और HAL
SDV Core के उपयोगकर्ता, Android 6.1 कर्नल के साथ Android के GKI कर्नल का इस्तेमाल करते हैं. GKI का इस्तेमाल करने का फ़ायदा यह है कि अपस्ट्रीम में किए गए बदलाव, आखिर में Android में भी लागू हो जाते हैं. इसके अलावा, Android सभी डिवाइसों पर एक ही कर्नल का इस्तेमाल करता है. उदाहरण के लिए, पैच को कई वेंडर कर्नल के बजाय, एक ही जगह पर लागू किया जाता है.
इससे SDV को स्टेबल कर्नल इंटरफ़ेस भी मिलता है. उदाहरण के लिए, ड्राइवर को ऐसे मॉड्यूल के तौर पर कंपाइल किया जा सकता है जो GKI के साथ काम करते हैं. ऐसा तब भी होता है, जब सुरक्षा से जुड़ी समस्याओं को ठीक करने वाला नया कर्नल डिप्लॉय किया जाता है.
GKI कर्नल की एक तय समयसीमा होती है. वेंडर के ऐसे बदलाव जिन्हें अगले GKI कर्नल का हिस्सा बनना है उन्हें साल के आखिर तक Linux कर्नल में अपस्ट्रीम किया जाना चाहिए.
GKI के साथ, डिवाइस ड्राइवर और बूट न होने पर ज़रूरी मॉड्यूल को कर्नल मॉड्यूल के तौर पर कंपाइल किया जाएगा.साथ ही, इन्हें ऐसे रैमडिस्क में शामिल किया जाएगा जिसे बूटिंग के दौरान लोड किया जाता है. डिवाइस के ऐसे कॉन्फ़िगरेशन जिन्हें कर्नल मॉड्यूल इंटरफ़ेस के लिए इंतज़ार नहीं करना पड़ता (जैसे कि रैंडम इनिशियलाइज़ेशन), उन्हें डिवाइस ट्री में किया जाना चाहिए. कर्नल मॉड्यूल को अपस्ट्रीम करने की ज़रूरत नहीं है. हालांकि, इन्हें GKI इंटरफ़ेस के ख़िलाफ़ कंपाइल किया जाना चाहिए.
SDV Core यह मानता है कि इसे Virtio के साथ काम करने वाले हाइपरवाइज़र के ऊपर बनाया गया है. इसलिए, अगर यह सुविधा काम करती है, तो ड्राइवर Virtio कर्नल मॉड्यूल के तौर पर डिलीवर किए जाते हैं. अगर यह सुविधा काम नहीं करती है, तो ड्राइवर किसी अन्य ओपन स्टैंडर्ड के तौर पर डिलीवर किए जाते हैं. उदाहरण के लिए, DICE के लिए Open Profile और भरोसे के लिए open-dice कर्नल ड्राइवर.
Virtio (और ओपन स्टैंडर्ड) और हाइपरवाइज़र के इस कॉम्बिनेशन से, हार्डवेयर ऐब्स्ट्रैक्शन होता है. इसलिए, SDV में HAL की ज़रूरत कम होती है. हालांकि, Virtio के काम न करने की वजह से, कुछ HAL की ज़रूरत अब भी होती है. उदाहरण के लिए, हार्डवेयर की मदद से क्रिप्टोग्राफ़ी के लिए KeyMint HAL और एसडीवी वीएम के बीच पुष्टि करने के लिए, इससे मिलता-जुलता IRemotelyPrivisionedComponent HAL.
नेटवर्किंग और कम्यूनिकेशन स्टैक
तीसरी इमेज. SDV Core Networking and Communication Stack.
नेटवर्किंग के लिए, SDV Core यह मानता है कि वीएम के बीच कम्यूनिकेट करने के लिए, vsock या Ethernet उपलब्ध हैं. वीएम के अंदर कम्यूनिकेट करने के लिए, IPC के तरीकों का भी इस्तेमाल किया जा सकता है. जैसे, बाइंडर.
एसडीवी, सीरियल कम्यूनिकेशन की सुविधा सिर्फ़ डीबग करने के लिए देता है.
चौथी इमेज. डीबग करने के लिए, SDV Core सीरियल सपोर्ट.
SDV, एक ही मेहमान के लिए कई विकल्प उपलब्ध कराता है. ये विकल्प, कम्यूनिकेशन मॉडल और परफ़ॉर्मेंस की ज़रूरी शर्तों पर निर्भर करते हैं.
Vsock
Vsock, कई वीएम या होस्ट और वीएम के बीच लोकल कम्यूनिकेशन के लिए पसंदीदा चैनल है. वर्चुअल मशीनों को एक-दूसरे के साथ सीधे vsock कम्यूनिकेशन का इस्तेमाल करना चाहिए, ताकि लागू करने की प्रोसेस, कॉपी की संख्या को ऑप्टिमाइज़ कर सके.
साझा मेमोरी
शेयर की गई मेमोरी का इस्तेमाल सिर्फ़ आईपीसी (इंटर प्रोसेस कम्यूनिकेशन) के लिए किसी वीएम से कम्यूनिकेट करने के लिए किया जाता है. हालांकि, इसे एक से ज़्यादा वीएम के बीच कम्यूनिकेट करने के लिए, सामान्य चैनल के तौर पर उपलब्ध नहीं कराया जाता. होस्ट, मेहमान के साथ जानकारी शेयर करने के लिए शेयर की गई मेमोरी का इस्तेमाल कर सकता है. हालांकि, इसका इस्तेमाल ज़्यादा फ़्रीक्वेंसी वाले नेटवर्किंग ट्रैफ़िक के लिए नहीं किया जाता है.
ईथरनेट
ईथरनेट का इस्तेमाल, एक से ज़्यादा एसओसी के बीच कम्यूनिकेशन के लिए किया जाएगा. इसका मतलब है कि इसका इस्तेमाल, वाहन में मौजूद सिस्टम के बीच कम्यूनिकेशन के लिए किया जाएगा. ये वर्चुअलाइज़ किए गए सिस्टम हो सकते हैं. हालांकि, ये नेटिव सिस्टम या लेगसी ईसीयू भी हो सकते हैं.
वाहन का नेटवर्क इतना छोटा है कि सभी उपलब्ध सिस्टम की पहचान करने के लिए, IPv4 पता काफ़ी है. हालांकि, यह पक्का करने के लिए कि सिस्टम, संभावित अपलिंक और आने वाले समय में होने वाले डेवलपमेंट के साथ काम करता है, IPv4 और IPv6 का इस्तेमाल किया जाना चाहिए.
वीएलएएन
वीएलएएन, वर्चुअल नेटवर्क आर्किटेक्चर बनाने का एक तरीका है. इससे अलग-अलग सबनेटवर्क को अलग किया जा सकता है और लोकल नेटवर्क बनाए जा सकते हैं. इसका इस्तेमाल अलग-अलग सुरक्षा ज़ोन बनाने के लिए किया जा सकता है. साथ ही, कारों में भी इसी मकसद से इसका इस्तेमाल किया जाता है. वीएलएएन की सुविधा ज़रूरी है.
प्रोटोकॉल
टीसीपी और यूडीपी
इस्तेमाल के उदाहरण के आधार पर, सिस्टम को भरोसेमंद या भरोसेमंद न होने वाले, लेकिन तेज़ कम्यूनिकेशन प्रोटोकॉल की ज़रूरत होती है. इसलिए, टीसीपी और यूडीपी काम करेंगे.
डेटा टनल
डेटा टनल, एसडीवी के लिए नया कम्यूनिकेशन सिस्टम है. यह पबसब मॉडल के हिसाब से काम करता है और तेज़ कम्यूनिकेशन चैनल उपलब्ध कराता है. उदाहरण के लिए, एक ऐप्लिकेशन किसी विषय को पब्लिश करता है, जबकि एक या उससे ज़्यादा ऐप्लिकेशन उसे सुन सकते हैं. आंतरिक तौर पर, यह वीएम में शेयर की गई मेमोरी और FMQ (फ़ास्ट मैसेज कतारें) का इस्तेमाल करता है. इसके अलावा, यह वीएम के बीच कम्यूनिकेट करने के लिए, vsock या ईथरनेट का इस्तेमाल करता है.
(SDV) RPC
SDV RPC, SDV के लिए रिमोट प्रोसीजर कॉल लागू करता है. इसके लिए, बाइंडर का इस्तेमाल किया जाता है. यह रिमोट प्रोसीज़र को कॉल करने के लिए, पहले से तय किए गए एपीआई का इस्तेमाल करता है. यह डेटा टनल की तरह ही काम करता है. यह वीएम के अंदर कम्यूनिकेशन के लिए शेयर की गई मेमोरी का इस्तेमाल करता है. इसके अलावा, यह क्रॉस-वीएम कम्यूनिकेशन के लिए vsock या ईथरनेट का इस्तेमाल करता है.
फ़्रेमवर्क
SOMEIP
SOMEIP का इस्तेमाल, SDV के अलावा अन्य सिस्टम से कम्यूनिकेट करने के लिए किया जाता है. यह टीसीपी और यूडीपी पर आधारित है. इसके लिए, किसी खास हार्डवेयर या ड्राइवर की ज़रूरत नहीं होती. Google, रेफ़रंस लागू करेगा.
सर्विस डिस्कवरी एजेंट (एसडी एजेंट)
यह SDV को डिवाइस और सेवाओं की अपने-आप पहचान करना, पुष्टि करने, और अनुमति देने की सुविधा देता है. कम्यूनिकेशन के लिए, यह ऊपर बताए गए किसी भी तरीके का इस्तेमाल कर सकता है. पुष्टि करने और अनुमति देने के लिए, एसडी एजेंट को सुरक्षा हार्डवेयर का ऐक्सेस चाहिए होगा. साथ ही, भरोसेमंद चेन का काम करना भी ज़रूरी है.
मिडलवेयर
SDV, उन सभी अलग-अलग प्रोटोकॉल को आसानी से इस्तेमाल करने के लिए एक फ़्रेमवर्क बनाता है. इसे मिडलवेयर कहा जाता है. यह सभी वाहन सिग्नल के लिए, भरोसेमंद सोर्स भी लागू करता है. इसके लिए, नई भाषा VSIDL का इस्तेमाल किया जाता है.
न्यूट्रल ज़ोन
सिस्टम के कुछ हिस्सों को अलग करने के लिए, नेटवर्क अलग-अलग ज़ोन बना सकता है. इनमें डीमिलिटराइज़्ड ज़ोन भी शामिल हैं. ऐसा इसलिए किया जाता है, ताकि सिस्टम के कम भरोसेमंद हिस्से (उदाहरण के लिए, कस्टम तौर पर इंस्टॉल किए गए ऐप्लिकेशन वाला आईवीआई) से होने वाले हमलों को रोका जा सके. इसका मतलब है कि सबनेटवर्क को फ़िज़िकल या लॉजिकल तौर पर अलग किया जाता है. साथ ही, सिर्फ़ अनुमति वाले ट्रैफ़िक को ही इन सीमाओं को पार करने की अनुमति होती है.
कनेक्टिविटी मैनेजर
Android में, यह आम तौर पर किया जाता है कि सॉकेट कनेक्शन खोलने वाले ऐप्लिकेशन और सेवाओं की संख्या सीमित रखी जाए. इसके बजाय, कनेक्शन खोलने और मैनेज करने की ज़िम्मेदारी एक सेंट्रल इंस्टेंस की होती है. Android इस सुविधा को Java सेवा में लागू करता है. इसलिए, SDV अपना कनेक्टिविटी मैनेजर बनाएगा.
अपडेट करने की क्षमता
एसडीवी की मुख्य सुविधाओं में से एक, अपडेट करने की सुविधा है. Android सिस्टम अपडेट और APEX पैकेज के ज़रिए, एसडीवी के पूरे जीवनकाल में नई सुविधाएं इंस्टॉल की जा सकती हैं.
Android सिस्टम अपडेट
Android पहले से ही अपडेट इंस्टॉल करने का तरीका उपलब्ध कराता है. यह हाल ही के वर्शन में, ए/बी और वर्चुअल ए/बी अपडेट का इस्तेमाल करता है. SDV Core इस तरीके का इस्तेमाल करेगा. A/B अपडेट, हर पार्टीशन को दो बार बनाते हैं. इससे दो फ़ायदे मिलते हैं: सिस्टम को बैकग्राउंड में अपडेट किया जा सकता है. साथ ही, अगर अपडेट नहीं होता है, तो सिस्टम को पिछली बार इस्तेमाल किए गए वर्शन पर वापस लाया जा सकता है, ताकि वह काम कर सके.
APEX पैकेज
सिस्टम को कई पार्टिशन में बाँटने और उन्हें अपडेट करने की सुविधा देने के अलावा, Android APEX पैकेज भी उपलब्ध कराता है. यह एक ऐसा तरीका है जिससे ऐप्लिकेशन और लाइब्रेरी को छोटे पैकेज में रखा जा सकता है. इन्हें सिस्टम अपडेट से अलग इंस्टॉल और अपडेट किया जा सकता है.
SDV Core, SDV इंस्टेंस पर सेवाओं को डाइनैमिक तरीके से इंस्टॉल करने के लिए, APEX कंटेनर का इस्तेमाल करेगा. साथ ही, एक ही प्रोसेस में कई सेवाओं को डिप्लॉय करने के लिए भी इनका इस्तेमाल करेगा: सिर्फ़ वे सेवाएं एक ही बाइनरी में डिप्लॉय की जा सकती हैं जिन्हें एक ही APEX में बंडल किया गया है और जो एक ही सर्टिफ़िकेट का इस्तेमाल करती हैं. इससे सुरक्षा से जुड़े जोखिम कम हो जाते हैं.
Android में APEX पैकेज इंस्टॉल करने के लिए, APK मैनेजमेंट के कुछ Java कोड का इस्तेमाल किया जाता है. इससे पैकेज की पुष्टि की जाती है. SDV Core को, एपीईएक्स पैकेज को डाइनैमिक तरीके से इंस्टॉल करने की अनुमति देने के लिए, नेटिव विकल्प लागू करना होगा.
अपडेट मैनेज करना
एसडीवी इंस्टेंस, कार में पूरी तरह से स्वतंत्र यूनिट नहीं होते हैं. इन्हें अन्य एसडीवी इंस्टेंस और कार की सेवाओं के साथ मिलकर काम करना होता है. उदाहरण के लिए, सर्विस डिपेंडेंसी इंस्टॉल करने या यह पक्का करने के लिए कि अपडेट सिर्फ़ सुरक्षित सिस्टम स्टेट में इंस्टॉल किए गए हों.
SDV, एक से ज़्यादा वर्चुअल मशीन (वीएम) पर पार्टीशन का इस्तेमाल करने पर विचार करता है. इसके लिए, इन वीएम के बीच तालमेल होना ज़रूरी है, क्योंकि ये एक-दूसरे पर डेटा के लिए निर्भर होते हैं: इन पार्टीशन को अपडेट करने के लिए, एक प्राइमरी वीएम होना चाहिए. साथ ही, अपडेट किए गए पार्टीशन के बारे में अन्य वीएम को सूचना देने का एक तरीका होना चाहिए. इसके अलावा, सभी वीएम को एक ही समय पर अपडेट करने के लिए सिंक्रनाइज़ेशन की सुविधा होनी चाहिए, ताकि यह पक्का किया जा सके कि पहले से काम कर रही स्थिति में कोई बदलाव न हो.
शुरू करें
हमारी शुरू करने से जुड़ी गाइड में, सोर्स कोड, Cuttlefish की मदद से ऐप्लिकेशन बनाने और लॉन्च करने के बारे में जानकारी दी गई है.