आर्किटेक्चर

AAOS में VirtIO की सुविधा के लिए ज़रूरी बदलावों में से ज़्यादातर में HAL के बदलाव शामिल हैं Android Common कर्नेल में लागू करने के स्तर और उससे नीचे के लेवल के लिए. Android फ़्रेमवर्क AAOS मेहमान में, VirtIO ड्राइवर का इस्तेमाल करके, हार्डवेयर-एग्नोस्टिक HAL से संपर्क करता है वीएम कर्नेल, जो VirtIO प्रोटोकॉल का इस्तेमाल करके होस्ट की ओर से VirtIO डिवाइसों से संपर्क करता है. होस्ट की ओर से VirtIO डिवाइस, SoC के हिसाब से बने डिवाइस ड्राइवर का इस्तेमाल करके फ़िज़िकल HW को ऐक्सेस कर सकते हैं.

VirtIO ड्राइवर और VirtIO डिवाइस के बीच कम्यूनिकेशन के साथ होता है virtqueue, जो स्कैटर कलेक्ट सूचियों के डीएमए जैसे रिंग बफ़र होते हैं. कई ट्रांसपोर्ट, जैसे कि एमएमआईओ या पीसीआई वर्चुअल मशीन के बीच VirtIO मैसेज को एक्सचेंज करने के लिए इस्तेमाल किया जा सकता है.

कुछ मामलों में, इंटर-वीएम कम्यूनिकेशन के लिए vsock का इस्तेमाल किया जाता है. वाहन के एचएएल, ऑडियो कंट्रोल, और डंपस्टेट कम्यूनिकेशन के लिए, कनेक्शन का इस्तेमाल किया जा सकता है vsock इंटरफ़ेस पर, अलग वर्चुअल मशीन (वीएम) से मिलते-जुलते एजेंट को भेजा जा सकता है. GRPC-vsock का इस्तेमाल, इन नॉन-स्टैंडर्ड सबसिस्टम को ऐक्सेस करने के लिए किया जाता है. जीआरपीसी में बदलाव किया गया है, ताकि Android सोर्स ट्री में इस पते के साथ vsock के साथ काम करने के लिए बदलाव किया गया हो vsock:CID:PORT_NUMBER का फ़ॉर्मैट.

वर्चुअलाइज़ेशन आर्किटेक्चर
पहली इमेज. वर्चुअलाइज़ेशन आर्किटेक्चर

ऑडियो

वर्चुअलाइज़ किए गए AAOS में, ऑडियो ऐक्सेस करने के लिए Android के मेहमान वर्चुअल मशीन (वीएम) virtio-snd का इस्तेमाल कर सकते हैं. virtio-snd, Android वीएम को वर्चुअल पीसीएम डिवाइस उपलब्ध कराता है, ताकि ऑडियो एचएएल लागू करने पर, वर्चुअलाइज़ किए गए साउंड डिवाइस से इंटरैक्ट किया जा सकता है. टाइनीएएलएसए लाइब्रेरी.

डिफ़ॉल्ट ऑडियो एचएएल लागू करने का तरीका एओएसपी में है, जहां /device/google/trout/hal/audio/6.0. OEM बदलाव कर सकते हैं अपने प्लैटफ़ॉर्म के लिए ro.vendor.trout.audiohal.{in,out}_period_{ms,count}. OEM यह कर सकते हैं अपने ऑडियो एचएएल को लागू करने के लिए, /device/google/trout/aosp_trout_common.mk. अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

ऑडियो कंट्रोल एचएएल, एएओएस में ऑडियो फ़ोकस को मैनेज करता है. उदाहरण के लिए, जब सिस्टम चल रहा हो आपातकालीन स्थितियों में आने वाली आवाज़ें, बैकग्राउंड में चल रहे संगीत को म्यूट करना पड़ सकता है. ऑडियो कंट्रोल एचएएल संगीत चलाने वाले उन ऐप्लिकेशन को इस स्थिति में म्यूट करने के लिए सूचित करता है. वर्चुअलाइज़ किए गए सिस्टम में, आवाज़ें, दूसरी वीएम से आ सकती हैं. रेफ़रंस के तौर पर दी गई वैल्यू को लागू करने पर, AAOS मेहमान की वर्चुअल मशीन (वीएम) में एक ऑडियो कंट्रोल सर्वर डीमन चल रहा है, जो पाने के लिए GRPC-vsock का इस्तेमाल करता है दूसरी वीएम से किए गए ऑडियो फ़ोकस के अनुरोध. होस्ट वीएम, device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller का इस्तेमाल कर सकती है AAOS को ऑडियो कंट्रोल के अनुरोध भेजने के लिए. libandroid_audio_controller के पास ऑडियो फ़ोकस का इस्तेमाल करता है, तो यह फ़ोकस रिलीज़ होने तक AAOS को हार्टबीट भेजता रहता है.

ऑडियो आर्किटेक्चर
पांचवीं इमेज. ऑडियो आर्किटेक्चर

ब्लूटूथ

ब्लूटूथ, नीचे बताए गए डिज़ाइन के हिसाब से काम करता है.

ब्लूटूथ आर्किटेक्चर
पांचवीं इमेज. ब्लूटूथ आर्किटेक्चर

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

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

  • hfp_enable
  • hfp_set_sampling_rate
  • hfp_volume

जब AAOS, मेहमान के तौर पर वर्चुअल मशीन (वीएम) के तौर पर काम करता है, तो AAOS इन ऑडियो कंट्रोल को सेट करने के लिए टाइनीअलsa का इस्तेमाल करता है. एचएफ़पी की सुविधा चालू करने के लिए इस्तेमाल के उदाहरण में, होस्ट/हाइपरवाइज़र वेंडर के हिसाब से रूटिंग और कैलिब्रेशन करता है.

ब्लूटूथ की सुविधा, नीचे दिए गए डिज़ाइन के हिसाब से लागू की गई है.

ब्लूटूथ आर्किटेक्चर
पांचवीं इमेज. ब्लूटूथ आर्किटेक्चर

डंपस्टेट

वर्चुअलाइज़्ड AAOS के लिए गड़बड़ी की रिपोर्ट जनरेट करते समय, होस्ट वीएम की जानकारी को शामिल करना ज़रूरी होता है ताकि डेवलपर को सिस्टम के बारे में ज़्यादा जानकारी मिल सके. ऐसा करने के लिए, trout रेफ़रंस को लागू करने की प्रोसेस, IDumpstateDevice एचएएल को लागू करती है, जिसमें यह सुविधा, GRPC-vsock के ज़रिए होस्ट की वर्चुअल मशीन (वीएम) की जानकारी इकट्ठा करती है. `tar`-पैकेज्ड होस्ट वीएम गड़बड़ी की रिपोर्ट में जानकारी को dumpstate_board.bin नाम दिया गया, जबकि डंपिंग लॉग यहां दिए गए हैं dumpstate_board.txt.

कमांड कॉन्फ़िगर करने के लिए:

  1. नीचे दी गई फ़ाइल के कॉन्फ़िगरेशन की जानकारी को किसी एक्सएमएल फ़ाइल में कॉपी करें, उदाहरण के लिए, 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. लॉन्च करते समय, नई एक्सएमएल फ़ाइल का पाथ डंपस्टेट सर्वर पर भेजें. जैसे:
    --config_file my_config.xml
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

एक्सटेंडेड व्यू सिस्टम (ईवीएस)

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

गराज मोड

ज़्यादा जानकारी के लिए, यह देखें गराज मोड.

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

ग्लोबल नेविगेशन सैटलाइट सिस्टम (जीएनएसएस)

trout के 1.0 वर्शन में, virtio-console से ज़्यादा GNSS वर्चुअलाइज़ेशन की सुविधा में जोड़ा गया. इसे लागू करने पर, रॉ मेज़रमेंट और जगह की जानकारी ठीक से ट्रांसफ़र किया जा सकता है होस्ट, मेहमान के लिए.

डेटा एक्सचेंज करने का फ़ॉर्मैट, ऐसी CSV फ़ाइल है जिसका इस्तेमाल GnssLogger ऐप्लिकेशन करता है. रेफ़रंस फ़ाइलों को लागू करने में, नेटिव GNSS ड्राइवर उपलब्ध नहीं है. इसलिए, मॉक डेटा उपलब्ध है, लेकिन नेटिव ड्राइवर उपलब्ध है इन्हें बिना किसी मेहमान के लागू किया जा सकता है. इसके हिस्से के तौर पर, एक सैंपल मॉक होस्ट एजेंट दिया गया है trout सोर्स कोड.

मौजूदा विकल्प के हिसाब से, जीएनएसएस शुरू करने और असिस्टेड जीएनएसएस (एजीएनएसएस) को हैंडल किया जाएगा होस्ट OS एनवायरमेंट के मुताबिक प्रोसेस करना.

जीएनएसएस आर्किटेक्चर
दूसरी इमेज. जीएनएसएस आर्किटेक्चर

ग्राफ़िक्स

अगर AAOS को अन्य ऑटोमोटिव ऑपरेटिंग सिस्टम के साथ-साथ मेहमान वीएम के तौर पर चलाया जा रहा है, तो हो सकता है कि Android जीपीयू या डिसप्ले कंट्रोलर का सीधा ऐक्सेस होता है. इस मामले में, Mesa या goldfish-opengl Android गेस्ट वीएम और virtio-gpu डिवाइस के लिए, एक virtio-gpu ड्राइवर का इस्तेमाल जीपीयू को ऐक्सेस करने के लिए किया जा सकता है.

Android के मेहमान वीएम पर, Mesa या goldfish-opengl, OpenGLES निर्देशों को या तो कोड में बदल देते हैं गैलियम स्ट्रीम में या अपने-आप जनरेट होने वाली जीएलईएस स्ट्रीम में. virtio-gpu कर्नेल ड्राइवर का इस्तेमाल ट्रांसपोर्ट के तौर पर किया जाता है. होस्ट की ओर, virglrenderer (मीसा के लिए) और vulkan-cereal (goldfish-opengl के लिए) डिकोड की गई कमांड स्ट्रीम इस डिवाइस पर फिर से चलाएं ऊपर की ओर ले जाते हैं. AAOS रेफ़रंस प्लैटफ़ॉर्म trout, OpenGL ES के साथ काम करता है सिर्फ़ Vulkan की सुविधा के साथ उपलब्ध है. आने वाले समय में इसकी रिलीज़ का अनुमान लगाया जा सकता है.

ग्राफ़िक आर्किटेक्चर
तीसरी इमेज. ग्राफ़िक आर्किटेक्चर

सेंसर

जब AAOS, अन्य ऑटोमोटिव ऑपरेटिंग सिस्टम के साथ-साथ मेहमान वीएम के तौर पर चल रहा हो, ऐसा हो सकता है कि Android के पास, सेंसर का सीधा ऐक्सेस न हो. इस मामले में, Virtio-SCMI ड्राइवर सेंसर ऐक्सेस करने के लिए, Android गेस्ट वीएम और Host VM पर VirtIO-SCMI डिवाइस का इस्तेमाल किया जाता है. AAOS वर्चुअलाइज़ेशन रेफ़रंस प्लैटफ़ॉर्म, एक जेनरिक और HW-ऐग्नोस्टिक सेंसर एचएएल उपलब्ध कराता है जो इसका इस्तेमाल ARM पर आधारित SoCs के लिए किया जा सकता है, ताकि सेंसर ऐक्सेस किए जा सकें.

सेंसर HAL, Linux Kernel IIO सबसिस्टम में IIO SCMI ड्राइवर से संपर्क करता है, जो एससीएमआई सेंसर मैनेजमेंट प्रोटोकॉल का इस्तेमाल करता है. एआरएम सिस्टम कंट्रोल ऐंड मैनेजमेंट इंटरफ़ेस (एससीएमआई) सेंसर खोजने और कॉन्फ़िगर करने, सेंसर का डेटा पढ़ने, और सेंसर के बारे में सूचना पाने के लिए खास बातें मान में बदलाव.

IIO SCMI का ड्राइवर, VirtIO SCMI ड्राइवर का इस्तेमाल करता है, जो VirtIO ट्रांसपोर्ट का इस्तेमाल करता है प्रोटोकॉल, जैसा कि virtio-scmi अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है होस्ट वीएम पर, VirtIO SCMI डिवाइस के साथ SCMI मैसेज को एक्सचेंज करने के बारे में जानकारी. The VirtIO SCMI डिवाइस, SoC के हिसाब से बने सेंसर ड्राइवर के ज़रिए सीधे तौर पर सेंसर ऐक्सेस कर सकता है.

सेंसर आर्किटेक्चर
चौथी इमेज. सेंसर आर्किटेक्चर

सेंसर एचएएल की जगह

VirtIO SCMI का इस्तेमाल करने वाले सेंसर एचएएल के रेफ़रंस को लागू करने की प्रोसेस यहां दी गई है: device/google/trout/hal/sensors.

सेंसर एचएएल कॉन्फ़िगरेशन

सेंसर एचएएल को होस्ट वीएम से मिले सेंसर डेटा में बदलाव करना पड़ सकता है, ताकि: Android कार सेंसर कोऑर्डिनेट सिस्टम. सेंसर कॉन्फ़िगरेशन के लिए स्कीमा यहां मिल सकता है device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd.

OEMs में, सेंसर कॉन्फ़िगरेशन उपलब्ध कराया जा सकता है. जैसे, स्क्रीन की दिशा और जगह की जानकारी 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 को इस्तेमाल किए जाने वाले एपीआई उपलब्ध कराता है
  • सर्वर. यह हार्डवेयर से सीधे तौर पर जुड़ा होता है, जैसे कि वाहन की बसें (या एम्युलेटर).

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

अन्य सबसिस्टम

VirtIO ने पहले से ही Block Storage, नेटवर्क, कंसोल, इनपुट, सॉकेट, और Entropy. इन सबसिस्टम के लिए, AAOS ड्राइवर के तौर पर, जैसे कि virtio-blk, virtio-input, virtio-console और virtio-net.

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