आर्किटेक्चर

AAOS में VirtIO का समर्थन करने के लिए आवश्यक अधिकांश परिवर्तनों में HAL कार्यान्वयन स्तर और एंड्रॉइड कॉमन कर्नेल में नीचे परिवर्तन शामिल हैं। एंड्रॉइड फ्रेमवर्क AAOS अतिथि VM कर्नेल में VirtIO ड्राइवरों का उपयोग करके एक सामान्य हार्डवेयर-अज्ञेयवादी HAL के साथ संचार करता है, जो VirtIO प्रोटोकॉल का उपयोग करके होस्ट पक्ष पर VirtIO उपकरणों के साथ संचार करता है। होस्ट पक्ष पर VirtIO डिवाइस SoC-विशिष्ट डिवाइस ड्राइवरों का उपयोग करके भौतिक HW तक पहुंच सकते हैं।

VirtIO ड्राइवर और VirtIO डिवाइस के बीच संचार virtqueue के साथ होता है, जो स्कैटर एकत्रित सूचियों के DMA-जैसे रिंग बफ़र्स हैं। वीएम के बीच VirtIO संदेशों के आदान-प्रदान के लिए MMIO या PCI जैसे कई ट्रांसपोर्ट का उपयोग किया जा सकता है।

कुछ मामलों में, अंतर-वीएम संचार के लिए vsock लाभ उठाया गया है। वाहन एचएएल, ऑडियो कंट्रोल और डंपस्टेट संचार को vsock इंटरफ़ेस पर एक अलग वीएम पर एक सहकर्मी एजेंट के कनेक्शन का उपयोग करके समर्थित किया जाता है। GRPC-vsock का उपयोग इन गैर-मानकीकृत उपप्रणालियों तक पहुँचने के लिए किया जाता है। एंड्रॉइड सोर्स ट्री में GRPC को vsock:CID:PORT_NUMBER के एड्रेस फॉर्मेट के साथ vsock के साथ काम करने के लिए संशोधित किया गया है।

वर्चुअलाइजेशन आर्किटेक्चर
चित्र 1. वर्चुअलाइजेशन आर्किटेक्चर

ऑडियो

वर्चुअलाइज्ड एएओएस में, एंड्रॉइड गेस्ट वीएम ऑडियो तक पहुंचने के लिए virtio-snd उपयोग कर सकता है। virtio-snd एंड्रॉइड VM को वर्चुअलाइज्ड PCM डिवाइस प्रदान करता है ताकि ऑडियो HAL कार्यान्वयन TinyALSA लाइब्रेरी के साथ वर्चुअलाइज्ड साउंड डिवाइस के साथ इंटरैक्ट कर सके।

डिफ़ॉल्ट ऑडियो HAL कार्यान्वयन AOSP में /device/google/trout/hal/audio/6.0 पर स्थित है। OEM अपने प्लेटफ़ॉर्म के लिए ro.vendor.trout.audiohal.{in,out}_period_{ms,count} संशोधित कर सकते हैं। ओईएम /device/google/trout/aosp_trout_common.mk.

ऑडियो नियंत्रण HAL AAOS में ऑडियो फोकस का प्रबंधन करता है। उदाहरण के लिए, जब सिस्टम आपातकालीन ध्वनियाँ बजा रहा हो, तो पृष्ठभूमि में बज रहे संगीत को म्यूट करने की आवश्यकता हो सकती है। ऑडियो नियंत्रण HAL इस स्थिति में संगीत चलाने वाले ऐप्स को म्यूट करने के लिए सूचित करता है। वर्चुअलाइज्ड सिस्टम में, ध्वनियाँ अन्य वीएम से आ सकती हैं। संदर्भ कार्यान्वयन में, AAOS अतिथि VM में एक ऑडियो नियंत्रण सर्वर डेमॉन चल रहा है, जो अन्य VM से ऑडियो फोकस अनुरोध प्राप्त करने के लिए GRPC-vsock उपयोग करता है। AAOS को ऑडियो नियंत्रण अनुरोध भेजने के लिए होस्ट VM device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller उपयोग कर सकता है। जबकि libandroid_audio_controller ऑडियो फोकस रखता है, यह फोकस जारी होने तक AAOS को दिल की धड़कन भेजना जारी रखता है।

ऑडियो आर्किटेक्चर
चित्र 5. ऑडियो आर्किटेक्चर

ब्लूटूथ

ब्लूटूथ कार्यान्वयन नीचे दिखाए गए डिज़ाइन पर आधारित है।

ब्लूटूथ वास्तुकला
चित्र 5. ब्लूटूथ आर्किटेक्चर

ब्लूटूथ हैंड्स-फ़्री प्रोफ़ाइल

trout पर ब्लूटूथ हैंड्स-फ़्री प्रोफ़ाइल (एचएफपी) को सक्षम करने के लिए, ऑडियो नियंत्रण का समर्थन करने के लिए VirtIO ध्वनि डिवाइस विनिर्देश को बढ़ाया गया है। इस दृष्टिकोण का उपयोग करते हुए, होस्ट/हाइपरवाइज़र पक्ष पर एक VirtIO ध्वनि उपकरण HFP से संबंधित ये तीन ऑडियो नियंत्रण प्रदान करता है:

  • hfp_enable
  • hfp_set_sampling_rate
  • hfp_volume

जब AAOS अतिथि VM के रूप में चलता है, तो AAOS इन ऑडियो नियंत्रणों को सेट करने के लिए TinyAlsa का उपयोग करता है। एचएफपी उपयोग के मामले को सक्षम करने के लिए, होस्ट/हाइपरवाइज़र तदनुसार विक्रेता-विशिष्ट रूटिंग और कैलिब्रेशन करता है।

ब्लूटूथ कार्यान्वयन नीचे दिए गए डिज़ाइन चित्रण पर आधारित है।

ब्लूटूथ वास्तुकला
चित्र 5. ब्लूटूथ आर्किटेक्चर

डंपस्टेट

वर्चुअलाइज्ड एएओएस के लिए बग्रेपोर्ट तैयार करते समय, होस्ट वीएम जानकारी को शामिल करना मूल्यवान है ताकि डेवलपर्स के पास सिस्टम का अधिक व्यापक दृष्टिकोण हो। इसे पूरा करने के लिए, trout संदर्भ कार्यान्वयन IDumpstateDevice HAL को लागू करता है, जो GRPC-vsock के माध्यम से होस्ट VM जानकारी एकत्र करता है। `टार`-पैकेज्ड होस्ट वीएम जानकारी को बगरेपोर्ट में dumpstate_board.bin नाम दिया गया है, जबकि डंपिंग लॉग dumpstate_board.txt पर हैं।

निष्पादित करने के लिए कमांड को कॉन्फ़िगर करने के लिए:

  1. नीचे दी गई फ़ाइल से कॉन्फ़िगरेशन विवरण को XML फ़ाइल में कॉपी करें, उदाहरण के लिए, config.xml
    <dumpstateHalConfiguration version="1.0">
        <services>
            <service name="coqos-virtio-blk"        command="/bin/journalctl --no-pager -t coqos-virtio-blk"/>
            <service name="coqos-virtio-net"        command="/bin/journalctl --no-pager -t coqos-virtio-net"/>
            <service name="coqos-virtio-video"      command="/bin/journalctl --no-pager -t coqos-virtio-video"/>
            <service name="coqos-virtio-console"    command="/bin/journalctl --no-pager -t coqos-virtio-console"/>
            <service name="coqos-virtio-rng"        command="/bin/journalctl --no-pager -t coqos-virtio-rng"/>
            <service name="coqos-virtio-vsock"      command="/bin/journalctl --no-pager -t coqos-virtio-vsock"/>
            <service name="coqos-virtio-gpu-virgl"  command="/bin/journalctl --no-pager -t coqos-virtio-gpu-virgl"/>
            <service name="coqos-virtio-scmi"       command="/bin/journalctl --no-pager -t coqos-virtio-scmi"/>
            <service name="coqos-virtio-input"      command="/bin/journalctl --no-pager -t coqos-virtio-input"/>
            <service name="coqos-virtio-snd"        command="/bin/journalctl --no-pager -t coqos-virtio-snd"/>
            <service name="dumpstate_grpc_server"   command="/bin/journalctl --no-pager -t dumpstate_grpc_server"/>
            <service name="systemd"                 command="/bin/journalctl --no-pager -t systemd"/>
            <service name="systemctl"               command="/bin/systemctl status"/>
            <service name="vehicle_hal_grpc_server" command="/bin/journalctl --no-pager -t vehicle_hal_grpc_server"/>
        </services>
        <systemLogs>
            <service name="dmesg" command="/bin/dmesg -kuPT"/>
        </systemLogs>
    </dumpstateHalConfiguration>
    
  2. लॉन्च करते समय नई XML फ़ाइल का पथ डंपस्टेट सर्वर पर पास करें। उदाहरण के लिए:
    --config_file my_config.xml
    

विस्तारित दृश्य प्रणाली (ईवीएस)

एक्सटेंडेड व्यू सिस्टम (ईवीएस) का उपयोग रियर-व्यू और सराउंड-व्यू कैमरों द्वारा कैप्चर किए गए वीडियो को प्रदर्शित करने के लिए किया जाता है। वर्चुअलाइज्ड AAOS में, EVS स्टैक वर्चुअलाइज्ड V4L2 स्ट्रीमिंग डिवाइस से वीडियो स्ट्रीम तक पहुंच सकता है जो VirtIO-वीडियो ड्राइवर का उपयोग करता है।

गैराज मोड

अधिक जानकारी के लिए गैराज मोड देखें।

गैराज मोड में प्रवेश करना और बाहर निकलना वाहन HAL द्वारा भेजे गए AP_POWER_STATE_REQ गुणों द्वारा ट्रिगर होता है। वर्चुअलाइजेशन मोड में, गैराज मोड होस्ट की ओर से ट्रिगर होता है। एंड्रॉइड वीएम के लिए वर्चुअल डिवाइस प्रदान करने के लिए होस्ट वीएम को तब तक चालू रहना चाहिए, जब तक एंड्रॉइड बंद न हो जाए। होस्ट VM पर VHAL सर्वर AAOS गेस्ट VM को शटडाउन सिग्नल भेजता है। सिग्नल वीएचएएल क्लाइंट प्राप्त करने पर, एएओएस वीएम गैराज मोड में प्रवेश करता है और होस्ट वीएम को सक्रिय रखने के लिए दिल की धड़कन के संकेत भेजना शुरू कर देता है।

वैश्विक नेविगेशन उपग्रह प्रणाली (जीएनएसएस)

trout 1.0 में, virtio-console पर जीएनएसएस वर्चुअलाइजेशन के लिए समर्थन जोड़ा गया है। कार्यान्वयन मेजबान से अतिथि तक कच्चे माप और स्थान निर्धारण के आदान-प्रदान का समर्थन करता है।

डेटा विनिमय प्रारूप GnssLogger ऐप द्वारा उपयोग किया जाने वाला CSV है। संदर्भ कार्यान्वयन में, क्योंकि मूल GNSS ड्राइवर उपलब्ध नहीं है, नकली डेटा उपलब्ध कराया गया है, लेकिन मूल ड्राइवर को बिना किसी अतिथि-पक्ष परिवर्तन के कार्यान्वित किया जा सकता है। trout स्रोत कोड के भाग के रूप में एक नमूना मॉक होस्ट एजेंट प्रदान किया जाता है।

वर्तमान कार्यान्वयन से उम्मीद है कि जीएनएसएस आरंभीकरण और सहायक जीएनएसएस (एजीएनएसएस) को मेजबान ओएस वातावरण द्वारा नियंत्रित किया जाएगा।

जीएनएसएस वास्तुकला
चित्र 2. जीएनएसएस वास्तुकला

GRAPHICS

जब एएओएस अन्य ऑटोमोटिव ऑपरेटिंग सिस्टम के साथ अतिथि वीएम के रूप में चल रहा है, तो एंड्रॉइड के पास जीपीयू या डिस्प्ले कंट्रोलर तक सीधी पहुंच नहीं हो सकती है। इस मामले में, मेसा या goldfish-opengl और एंड्रॉइड गेस्ट वीएम और virtio-gpu डिवाइस पर एक virtio virtio-gpu ड्राइवर का उपयोग GPU तक पहुंचने के लिए किया जा सकता है।

एंड्रॉइड गेस्ट वीएम पर, मेसा या goldfish-opengl ओपनजीएलईएस कमांड को क्रमशः गैलियम स्ट्रीम या ऑटो-जेनरेटेड जीएलईएस स्ट्रीम में एन्कोड करता है। virtio-gpu कर्नेल ड्राइवर का उपयोग ट्रांसपोर्ट के रूप में किया जाता है। मेजबान पक्ष पर, virglrenderer (मेसा के लिए) और vulkan-cereal ( goldfish-opengl के लिए) मौजूदा जीपीयू ड्राइवर के शीर्ष पर डिकोडेड कमांड स्ट्रीम को फिर से चलाते हैं। एएओएस संदर्भ प्लेटफ़ॉर्म trout केवल वल्कन समर्थन के साथ ओपनजीएल ईएस का समर्थन करता है, जो भविष्य में रिलीज होने की उम्मीद है।

ग्राफ़िक्स वास्तुकला
चित्र 3. ग्राफ़िक्स वास्तुकला

सेंसर

जब एएओएस अन्य ऑटोमोटिव ऑपरेटिंग सिस्टम के साथ अतिथि वीएम के रूप में चल रहा है, तो एंड्रॉइड के पास सेंसर तक सीधी पहुंच नहीं हो सकती है। इस मामले में, एंड्रॉइड गेस्ट वीएम पर Virtio-SCMI ड्राइवर और होस्ट VM पर Virtio-SCMI डिवाइस का उपयोग सेंसर तक पहुंचने के लिए किया जाता है। AAOS वर्चुअलाइजेशन संदर्भ प्लेटफ़ॉर्म एक सामान्य और HW-अज्ञेयवादी सेंसर HAL प्रदान करता है जिसका उपयोग सेंसर तक पहुंचने के लिए ARM-आधारित SoCs के लिए किया जा सकता है।

सेंसर HAL, लिनक्स कर्नेल IIO सबसिस्टम में IIO SCMI ड्राइवर के साथ संचार करता है, जो सेंसर को खोजने और कॉन्फ़िगर करने, सेंसर डेटा पढ़ने और सेंसर के बारे में सूचित करने के लिए ARM सिस्टम कंट्रोल एंड मैनेजमेंट इंटरफ़ेस (SCMI) विनिर्देश द्वारा प्रदान किए गए SCMI सेंसर प्रबंधन प्रोटोकॉल का उपयोग करता है। मूल्य परिवर्तन.

IIO SCMI ड्राइवर VirtIO SCMI ड्राइवर का उपयोग करता है, जो होस्ट VM पर VirtIO SCMI डिवाइस के साथ SCMI संदेशों का आदान-प्रदान करने के लिए virtio-scmi विनिर्देश में निर्दिष्ट VirtIO ट्रांसपोर्ट प्रोटोकॉल का उपयोग करता है। VirtIO SCMI डिवाइस की SoC-विशिष्ट सेंसर ड्राइवरों के माध्यम से सेंसर तक सीधी पहुंच है।

सेंसर वास्तुकला
चित्र 4. सेंसर वास्तुकला

सेंसर एचएएल स्थान

सेंसर एचएएल का संदर्भ कार्यान्वयन, जो VirtIO SCMI का उपयोग करता है, device/google/trout/hal/sensors पर स्थित है।

सेंसर एचएएल विन्यास

एंड्रॉइड कार सेंसर समन्वय प्रणाली का अनुपालन करने के लिए सेंसर एचएएल को होस्ट वीएम से प्राप्त सेंसर डेटा को संशोधित करने की आवश्यकता हो सकती है। सेंसर कॉन्फ़िगरेशन के लिए स्कीमा device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd में पाया जा सकता है।

OEM sensor_hal_configuration.xml में सेंसर कॉन्फ़िगरेशन, जैसे ओरिएंटेशन और स्थान, प्रदान कर सकते हैं और फ़ाइल को /odm/etc/sensors/ या /vendor/etc/sensors/ पर कॉपी कर सकते हैं। एक नमूना सेंसर कॉन्फ़िगरेशन नीचे दिया गया है:

<sensorHalConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
    <modules>
        <module halName="android.hardware.sensors@2.0-Google-IIO-Subhal" halVersion="2.0">
            <sensors>
                <sensor name="scmi.iio.accel" type="1">
                    <configuration>
<!-- Attribute rotate denotes if HAL needs to modify the sensor data to comply with //
        the Android car sensor coordinate system -->
                        <orientation rotate="true">
               <!-- Attribute map denotes the indexes of data in sensor data received -->
               <!-- Attribute negate denotes if data needs to be negated -->
                            <x map="0" negate="false"/>
                            <y map="1" negate="true"/>
                            <z map="2" negate="true"/>
                        </orientation>
                        <location>
               <!-- Attribute x, y, z denotes location of the sensor placement -->
                            <x>10</x>
                            <y>15</y>
                            <z>20</z>
                        </location>
                    </configuration>
                </sensor>
         </sensors>
        </module>
    </modules>
</sensorHalConfiguration>

वाहन एचएएल

वाहन एचएएल कार्यान्वयन में दो घटक शामिल हैं:

  • ग्राहक। वर्चुअलाइज्ड AAOS में Android द्वारा उपयोग की जाने वाली API प्रदान करता है
  • सर्वर. हार्डवेयर के साथ सीधे संचार करता है, जैसे वाहन बस (या एक एमुलेटर)।

वर्चुअलाइजेशन में, VHAL सर्वर होस्ट VM पर चलता है। VHAL क्लाइंट और सर्वर GRPC-vsock के माध्यम से संचार करते हैं (अधिक जानकारी के लिए, device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto देखें)। ओईएम संचार एपीआई को ओवरराइड करके जीआरपीसी के अलावा एक अलग परिवहन प्रोटोकॉल का उपयोग कर सकते हैं। उदाहरण के लिए, device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp देखें।

अन्य उपप्रणालियाँ

VirtIO पहले से ही ब्लॉक स्टोरेज, नेटवर्क, कंसोल, इनपुट, सॉकेट और एन्ट्रॉपी जैसे घटकों के लिए एक अच्छी तरह से परिभाषित इंटरफ़ेस प्रदान करता है। इन उपप्रणालियों के लिए, AAOS ड्राइवर का उपयोग यथावत करता है, जैसे virtio-blk , virtio-input , virtio-console , और virtio-net

वर्चुअलाइज्ड AAOS संदर्भ प्लेटफ़ॉर्म में, VirtWifi वायरलेस नेटवर्क को सक्षम करने के लिए वाई-फाई को mac80211_hwsim के साथ समर्थित किया गया है, जो तब होस्ट VM पर नेटवर्क ट्रैफ़िक भेजने के लिए virtio-net सुरंग का उपयोग करता है, जिसकी वास्तविक वाई-फाई नेटवर्क तक सीधी पहुंच होती है।