AAOS में VirtIO का समर्थन करने के लिए आवश्यक अधिकांश परिवर्तनों में HAL कार्यान्वयन स्तर पर और नीचे Android कॉमन कर्नेल में परिवर्तन शामिल हैं। Android फ्रेमवर्क AAOS अतिथि VM कर्नेल में VirtIO ड्राइवरों का उपयोग करके एक सामान्य हार्डवेयर-अज्ञेय HAL के साथ संचार करता है, जो VirtIO प्रोटोकॉल का उपयोग करके मेजबान पक्ष पर VirtIO उपकरणों के साथ संचार करता है। होस्ट साइड पर VirtIO डिवाइस SoC- विशिष्ट डिवाइस ड्राइवरों का उपयोग करके भौतिक HW तक पहुंच सकते हैं।
VirtIO ड्राइवर और VirtIO डिवाइस के बीच संचार virtqueue
के साथ होता है, जो स्कैटर इकट्ठा सूचियों के DMA जैसे रिंग बफ़र होते हैं। VMs के बीच VirtIO संदेशों का आदान-प्रदान करने के लिए कई ट्रांसपोर्ट, जैसे MMIO या PCI का उपयोग किया जा सकता है।
कुछ मामलों में, इंटर-वीएम संचार के लिए vsock
का लाभ उठाया गया है। वाहन एचएएल, ऑडियो कंट्रोल, और डंपस्टेट संचार एक पीयर एजेंट के कनेक्शन का उपयोग करके एक अलग वीएम पर एक vsock
इंटरफ़ेस पर समर्थित हैं। GRPC-vsock
का उपयोग इन गैर-मानकीकृत उप-प्रणालियों तक पहुँचने के लिए किया जाता है। Android स्रोत ट्री में GRPC को vsock
के साथ काम करने के लिए संशोधित किया गया है, जिसका पता प्रारूप vsock:CID:PORT_NUMBER
है।

ऑडियो
वर्चुअलाइज्ड AAOS में, Android अतिथि VM ऑडियो एक्सेस करने के लिए virtio-snd
का उपयोग कर सकता है। virtio-snd
Android VM को वर्चुअलाइज्ड PCM डिवाइस प्रदान करता है ताकि ऑडियो HAL कार्यान्वयन वर्चुअलाइज्ड साउंड डिवाइसेस के साथ TinyALSA लाइब्रेरी के साथ इंटरैक्ट कर सके।
डिफ़ॉल्ट ऑडियो एचएएल कार्यान्वयन एओएसपी में /device/google/trout/hal/audio/6.0
पर स्थित है। ओईएम अपने प्लेटफॉर्म के लिए ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
को संशोधित कर सकते हैं। OEM /device/google/trout/aosp_trout_common.mk.
ऑडियो कंट्रोल HAL AAOS में ऑडियो फोकस को मैनेज करता है। उदाहरण के लिए, जब सिस्टम आपातकालीन ध्वनियाँ बजा रहा हो, तो पृष्ठभूमि में चल रहे संगीत को म्यूट करने की आवश्यकता हो सकती है। ऑडियो कंट्रोल एचएएल इस स्थिति में संगीत चलाने वाले उन ऐप्स को म्यूट करने के लिए सूचित करेगा। वर्चुअलाइज्ड सिस्टम में, ध्वनियाँ अन्य VMs से आ सकती हैं। संदर्भ कार्यान्वयन में, AAOS अतिथि VM में एक ऑडियो नियंत्रण सर्वर डेमॉन चल रहा है, जो अन्य VMs से ऑडियो फ़ोकस अनुरोध प्राप्त करने के लिए GRPC-vsock
का उपयोग करता है। होस्ट VM AAOS को ऑडियो नियंत्रण अनुरोध भेजने के लिए device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
का उपयोग कर सकता है। जबकि libandroid_audio_controller
ऑडियो फ़ोकस रखता है, यह फ़ोकस जारी होने तक AAOS को दिल की धड़कन भेजना जारी रखेगा।

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

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

डंपस्टेट
वर्चुअलाइज्ड एएओएस के लिए बग्रेपोर्ट तैयार करते समय, मेजबान वीएम जानकारी को शामिल करना महत्वपूर्ण है ताकि डेवलपर्स के पास सिस्टम के बारे में अधिक व्यापक दृष्टिकोण हो। इसे पूरा करने के लिए, trout
संदर्भ कार्यान्वयन IDumpstateDevice
HAL लागू करता है, जो GRPC-vsock
माध्यम से होस्ट VM जानकारी एकत्र करता है। बग्रेपोर्ट में `टार`-पैकेज्ड होस्ट वीएम जानकारी को dumpstate_board.bin
नाम दिया गया है, जबकि डंपिंग लॉग dumpstate_board.txt
पर हैं।
निष्पादित करने के लिए आदेशों को कॉन्फ़िगर करने के लिए:
- नीचे दी गई फ़ाइल से कॉन्फ़िगरेशन विवरण को 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>
- लॉन्च करते समय नई एक्सएमएल फ़ाइल का पथ डंपस्टेट सर्वर पर पास करें। उदाहरण के लिए:
--config_file my_config.xml
2
विस्तारित दृश्य प्रणाली (ईवीएस)
विस्तारित दृश्य प्रणाली (EVS) का उपयोग रियर-व्यू और सराउंड-व्यू कैमरों द्वारा कैप्चर किए गए वीडियो को प्रदर्शित करने के लिए किया जाता है। वर्चुअलाइज्ड AAOS में, EVS स्टैक वर्चुअलाइज्ड V4L2 स्ट्रीमिंग डिवाइस से वीडियो स्ट्रीम तक पहुंच सकता है जो VirtIO-video ड्राइवर का उपयोग करता है।
गैराज मोड
अधिक जानकारी के लिए, गैराज मोड क्या है देखें? .
गैराज मोड में प्रवेश करना और बाहर निकलना वाहन HAL द्वारा भेजे गए AP_POWER_STATE_REQ
गुणों द्वारा ट्रिगर किया जाता है। वर्चुअलाइजेशन मोड में, होस्ट की ओर से गैराज मोड चालू हो जाता है। Android VM के बंद होने तक, होस्ट VM को Android VM के लिए वर्चुअल डिवाइस प्रदान करने के लिए चालू रहना चाहिए। मेजबान VM पर VHAL सर्वर AAOS अतिथि VM को शटडाउन संकेत भेजता है। सिग्नल VHAL क्लाइंट प्राप्त करने पर, AAOS VM गैराज मोड में प्रवेश करता है और होस्ट VM को सक्रिय रखने के लिए दिल की धड़कन के सिग्नल भेजना शुरू करता है।
वैश्विक नेविगेशन उपग्रह प्रणाली (GNSS)
trout
1.0 में, GNSS वर्चुअलाइजेशन के लिए virtio-console
पर समर्थन जोड़ा गया है। कार्यान्वयन मेजबान से अतिथि तक कच्चे माप और स्थान सुधार के आदान-प्रदान का समर्थन करता है।
डेटा विनिमय प्रारूप GnssLogger ऐप द्वारा उपयोग किया जाने वाला CSV है। संदर्भ कार्यान्वयन में, क्योंकि मूल GNSS ड्राइवर उपलब्ध नहीं है, नकली डेटा उपलब्ध कराया जाता है लेकिन एक देशी ड्राइवर को बिना किसी अतिथि-पक्ष परिवर्तन के लागू किया जा सकता है। trout
स्रोत कोड के भाग के रूप में एक नमूना मॉक होस्ट एजेंट प्रदान किया जाता है।
वर्तमान कार्यान्वयन GNSS आरंभीकरण और सहायक GNSS (AGNSS) को होस्ट OS वातावरण द्वारा नियंत्रित किए जाने की अपेक्षा करता है।

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

सेंसर
जब एएओएस अन्य ऑटोमोटिव ऑपरेटिंग सिस्टम के साथ अतिथि वीएम के रूप में चल रहा है, तो एंड्रॉइड के पास सेंसर तक सीधी पहुंच नहीं हो सकती है। इस स्थिति में, Android अतिथि VM पर Virtio-SCMI ड्राइवर और होस्ट VM पर VirtIO-SCMI डिवाइस का उपयोग सेंसर तक पहुंचने के लिए किया जाता है। एएओएस वर्चुअलाइजेशन संदर्भ मंच एक सामान्य और एचडब्ल्यू-अज्ञेय सेंसर एचएएल प्रदान करता है जिसका उपयोग सेंसर तक पहुंचने के लिए एआरएम-आधारित एसओसी के लिए किया जा सकता है।
सेंसर एचएएल लिनक्स कर्नेल आईआईओ सबसिस्टम में आईआईओ एससीएमआई ड्राइवर के साथ संचार करता है, जो सेंसर को खोजने और कॉन्फ़िगर करने, सेंसर डेटा पढ़ने और सेंसर की अधिसूचना प्राप्त करने के लिए एआरएम सिस्टम कंट्रोल एंड मैनेजमेंट इंटरफेस (एससीएमआई) विनिर्देश द्वारा प्रदान किए गए एससीएमआई सेंसर प्रबंधन प्रोटोकॉल का उपयोग करता है। मूल्य परिवर्तन।
IIO SCMI ड्राइवर, VirtIO SCMI ड्राइवर का उपयोग करता है, जो VirtIO ट्रांसपोर्ट प्रोटोकॉल का उपयोग करता है जैसा कि virtio-scmi
विनिर्देश में निर्दिष्ट है, SCMI संदेशों को VirtIO SCMI डिवाइस के साथ होस्ट VM पर एक्सचेंज करने के लिए। VirtIO SCMI डिवाइस की SoC- विशिष्ट सेंसर ड्राइवरों के माध्यम से सेंसर तक सीधी पहुंच है।

सेंसर एचएएल स्थान
सेंसर HAL का संदर्भ कार्यान्वयन, जो VirtIO SCMI का उपयोग करता है, device/google/trout/hal/sensors
पर स्थित है।
सेंसर एचएएल विन्यास
एंड्रॉइड कार सेंसर समन्वय प्रणाली का अनुपालन करने के लिए सेंसर एचएएल को होस्ट वीएम से प्राप्त सेंसर डेटा को संशोधित करने की आवश्यकता हो सकती है। सेंसर कॉन्फ़िगरेशन के लिए स्कीमा device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
में पाया जा सकता है।
OEMs sensor_hal_configuration.xml
में ओरिएंटेशन और स्थान जैसे सेंसर कॉन्फ़िगरेशन प्रदान कर सकते हैं और फ़ाइल को /odm/etc/sensors/
या /vendor/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>
वाहन HAL
वाहन एचएएल कार्यान्वयन में दो घटक होते हैं:
- ग्राहक। वर्चुअलाइज्ड एएओएस में एंड्रॉइड द्वारा उपयोग किए जाने वाले एपीआई प्रदान करता है
- सर्वर। हार्डवेयर के साथ सीधे संचार करता है, जैसे वाहन बसें (या एक एमुलेटर)।
वर्चुअलाइजेशन में, 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 रेफरेंस प्लेटफॉर्म में, वाई-फाई को mac80211_hwsim
के साथ सपोर्ट किया जाता है ताकि एक VirtWifi
वायरलेस नेटवर्क को सक्षम किया जा सके, जो तब नेटवर्क ट्रैफिक को होस्ट VM को भेजने के लिए virtio-net
टनल का उपयोग करता है, जिसकी वास्तविक वाई-फाई नेटवर्क तक सीधी पहुंच होती है।