تتضمن معظم التغييرات اللازمة لدعم VirtIO في نظام التشغيل Android Automotive تغييرات في HAL. مستوى التنفيذ وأقل في النواة المشتركة لنظام التشغيل Android. إطار عمل Android يتصل بـ HAL عام غير مرتبط بالأجهزة باستخدام برامج تشغيل VirtIO في ضيف AAOS نواة الجهاز الافتراضي (VM) التي تتواصل مع أجهزة VirtIO على الجانب المضيف باستخدام بروتوكولات VirtIO يمكن لأجهزة VirtIO على الجهاز المضيف الوصول إلى الأجهزة الفعلية باستخدام برامج تشغيل الأجهزة الخاصة بمجال المنظومة على الرقاقة (SoC).
يتم الاتصال بين برنامج تشغيل VirtIO وجهاز VirtIO من خلال
virtqueue
، وهي مخازن دائرية تشبه DMA الذي يضم قوائم جمع مبعثر.
عدة وسائل نقل، مثل
MMIO
أو
منفذ الملحقات الإضافية (PCI)
يمكن استخدامها لتبادل رسائل VirtIO بين الأجهزة الافتراضية.
وفي بعض الحالات، يمكن الاستفادة من vsock
في التواصل بين الأجهزة الافتراضية.
تتوفّر اتصالات HAL والتحكّم في الصوت وDumpstate في المركبة من خلال اتصال.
إلى وكيل زميل على جهاز افتراضي منفصل عبر واجهة vsock
.
تُستخدم GRPC-vsock
للوصول إلى هذه الأنظمة الفرعية غير الموحّدة.
GRPC
تم تعديل شجرة مصدر Android للعمل مع vsock
بالعنوان
بتنسيق vsock:CID:PORT_NUMBER
.
الصوت
في نظام التشغيل AAOS الافتراضي، يمكن للجهاز الافتراضي (VM) الخاص بالضيف من Android استخدام virtio-snd
للوصول إلى الصوت.
يوفّر virtio-snd
أجهزة PCM الافتراضية لجهاز Android الافتراضي،
يمكن لتطبيق HAL الصوتي أن يتفاعل مع الأجهزة الصوتية الظاهرية
مكتبة TinyALSA.
يوجد تنفيذ HAL الصوتي الافتراضي في AOSP على
/device/google/trout/hal/audio/6.0
يمكن للمصنّعين الأصليين للأجهزة تعديل
ro.vendor.trout.audiohal.{in,out}_period_{ms,count}
على منصتهم. يمكن للمصنّعين الأصليين
تنفيذ طبقة تجريد الأجهزة (HAL) الصوتية الخاصة بها من خلال إلغاء متغيرات الصوت في
/device/google/trout/aosp_trout_common.mk.
يدير عنصر التحكم في الصوت HAL تركيز الصوت في AAOS. على سبيل المثال، عند تشغيل النظام
أصوات الطوارئ، أو الموسيقى التي يتم تشغيلها في الخلفية قد تحتاج إلى كتم الصوت. طبقة تجريد الأجهزة (HAL) للتحكم في الصوت
لإرسال إشعار إلى التطبيقات التي تشغِّل الموسيقى لكتم الصوت في هذه الحالة. في النظام الافتراضي،
يمكن أن تأتي الأصوات من الأجهزة الافتراضية الأخرى. عند تنفيذ المرجع، يتم استخدام جهاز افتراضي لضيف AAOS.
يتضمّن برنامجًا خفيًا لخادم التحكّم في الصوت قيد التشغيل، يستخدم GRPC-vsock
لتلقّي
طلبات التركيز الصوتي من الأجهزة الافتراضية الأخرى
يمكن للجهاز الافتراضي المضيف استخدام device/google/trout/hal/audiocontrol/2.0/libandroid_audio_controller
لإرسال طلبات التحكّم في الصوت إلى نظام التشغيل Android Automotive (AAOS). بينما تحمل "libandroid_audio_controller
"
التركيز الصوتي، يستمر في إرسال نبضات القلب إلى AAOS حتى يتم تحرير التركيز.
البلوتوث
يعتمد تنفيذ البلوتوث على التصميم الموضح أدناه.
ملف تعريف البلوتوث بدون لمس الجهاز
لتفعيل ملف تعريف البلوتوث بدون لمس الجهاز (HFP) على trout
، يجب استخدام جهاز الصوت VirtIO
تم توسيع نطاق مواصفاتها لدعم عناصر التحكم في الصوت. يؤدي استخدام هذا النهج إلى إصدار صوت VirtIO
الجهاز على جانب المضيف/جهاز العرض الأساسي عناصر التحكم في الصوت الثلاثة هذه المتعلقة بالفيديو HFP:
hfp_enable
hfp_set_sampling_rate
hfp_volume
عند تشغيل AAOS كجهاز افتراضي للضيوف، يستخدم نظام التشغيل AAOS تطبيق TinyAlsa لضبط عناصر التحكّم في الصوت هذه. لتفعيل HFP حالة الاستخدام، يقوم المضيف/المراقب النظامي بتنفيذ التوجيه والمعايرة الخاص بالمورّد وفقًا لذلك.
يعتمد تنفيذ البلوتوث على الرسم التوضيحي للتصميم أدناه.
Dumpstate
عند إنشاء تقرير الأخطاء لنظام التشغيل Android Automotive (AAOS) الافتراضي، من المهم تضمين معلومات الجهاز الافتراضي (VM) الخاص بالمضيف
حتى يحصل المطوّرون على رؤية أكثر شمولاً للنظام. لتحقيق ذلك،
يؤدي تنفيذ مرجع trout
إلى تنفيذ طبقة تجريد الأجهزة (HAL) IDumpstateDevice
، والتي
تجمع معلومات الجهاز الافتراضي (VM) المضيف من خلال GRPC-vsock
. الجهاز الافتراضي (VM) الخاص بالمضيف "tar"
باسم "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>
- مرِّر مسار ملف XML الجديد إلى خادم dumpstate عند تشغيله. مثل:
--config_file my_config.xml
نظام العرض الممتد (EVS)
يُستخدم نظام العرض الممتد (EVS) لعرض الفيديو الذي تم التقاطه من خلال النظرة الخلفية كاميرات المراقبة المحيطية. في نظام التشغيل AAOS الافتراضي، يمكن لحزمة EVS الوصول إلى الفيديو المضمّن من جهاز البث V4L2 الافتراضي الذي يستخدم برنامج تشغيل الفيديو VirtIO.
وضع المرآب
لمزيد من المعلومات، يُرجى مراجعة وضع المرآب:
يتم تفعيل الدخول إلى وضع "المرآب" والخروج منه من خلال مواقع AP_POWER_STATE_REQ
.
التي تم إرسالها بواسطة طبقة تجريد الأجهزة (HAL) بالمركبة. في وضع المحاكاة الافتراضية، يتم تفعيل وضع Garage من جهة المضيف.
يجب أن يظل الجهاز الافتراضي المضيف قيد التشغيل لتوفير الأجهزة الافتراضية لأجهزة Android الافتراضية، إلى أن تتم ترقية نظام التشغيل Android
مُطفأ. يرسل خادم VHAL على الجهاز الافتراضي المضيف إشارة إيقاف التشغيل إلى الجهاز الافتراضي لضيف AAOS.
عند تلقّي إشارة عميل VHAL، يدخل الجهاز الافتراضي AAOS في وضع "المرآب" ويبدأ في إرسال النبضات القلبية.
لإبقاء الجهاز الافتراضي المضيف نشطًا.
نظام القمر الصناعي للتنقل العام (GNSS)
في الإصدار 1.0 من trout
، تم توفير إمكانية المحاكاة الافتراضية لنظام GNSS من خلال virtio-console
تمت إضافتها. يدعم التنفيذ تبادل القياسات الأولية وإصلاحات المواقع من
المضيف إلى الضيف.
تنسيق تبادل البيانات هو ملف CSV الذي يستخدمه تطبيق GnssLogger. عند تنفيذ المرجع
نظرًا لعدم توفر برنامج تشغيل GNSS الأصلي، تتوفر بيانات وهمية ولكن برنامج تشغيل أصلي
ويمكن تنفيذها دون أي تغييرات من جانب الضيف. يتم توفير نموذج لوكيل مضيف تجريبي كجزء من
رمز المصدر trout
.
تتوقع عملية التنفيذ الحالية معالجة إعداد GNSS وGNSS المدعوم (AGNSS). بواسطة بيئة نظام التشغيل المضيف.
الرسومات
عند تشغيل نظام التشغيل AAOS كجهاز افتراضي ضيف إلى جانب أنظمة التشغيل الأخرى للسيارات، قد لا يعمل Android
لديهم حق الوصول المباشر إلى وحدة معالجة الرسومات أو وحدة التحكم في الشاشة. وفي هذه الحالة،
Mesa أو
goldfish-opengl
وvirtio-gpu
برنامج تشغيل على جهاز Android افتراضي للضيوف virtio-gpu
يمكن استخدامها للوصول إلى وحدة GPU.
على الجهاز الافتراضي لضيف Android، يُرمّز Mesa أو goldfish-opengl
أوامر OpenGLES إما
إلى بث Gallium أو بث GLES تم إنشاؤه تلقائيًا، على التوالي. virtio-gpu
يتم استخدام برنامج تشغيل kernel كنقل. من جانب المضيف، virglrenderer
(لـ Mesa)
تشغيل سلسلة الأوامر التي تم فك ترميزها من خلال vulkan-cereal
(للمستخدم goldfish-opengl
) على
أعلى برنامج تشغيل وحدة معالجة الرسومات الحالي. يتوافق النظام الأساسي المرجعي AAOS trout
مع OpenGL ES.
فقط مع دعم Vulkan المتوقَّع في إصدار مستقبلي.
أجهزة الاستشعار
عند تشغيل نظام التشغيل AAOS كجهاز افتراضي ضيف إلى جانب أنظمة التشغيل الأخرى للسيارات، قد لا يملك Android إذن الوصول المباشر إلى أجهزة الاستشعار. في هذه الحالة، لن يتمكن برنامج تشغيل Virtio-SCMI على يتم استخدام جهاز Android افتراضي لضيف Android وجهاز VirtIO-SCMI على الجهاز الافتراضي (Host) للوصول إلى أدوات الاستشعار. توفِّر المنصة المرجعية للمحاكاة الافتراضية لنظام التشغيل AAOS مجموعة مستشعرات HAL عامة وغير متوافقة مع HW. استخدام تقنيات المنظومة على الرقاقة (SoC) القائمة على معادن ARM للوصول إلى المستشعرات.
يتواصل جهاز الاستشعار HAL مع برنامج تشغيل SCMI IIO في النظام الفرعي لـ Linux Kernel IIO، الذي يستخدم بروتوكول إدارة مستشعر SCMI الذي يوفره ARM واجهة التحكّم في النظام وإدارته (SCMI) المواصفات لاكتشاف أجهزة الاستشعار وضبطها، وقراءة بيانات جهاز الاستشعار، وتلقّي إشعارات بشأن أجهزة الاستشعار التغييرات في القيم.
يستخدم برنامج تشغيل IIO SCMI برنامج تشغيل VirtIO SCMI، والذي يستخدم نقل VirtIO
كما هو موضح في
virtio-scmi
مواصفات تبادل رسائل SCMI مع جهاز VirtIO SCMI على الجهاز الافتراضي (VM) المضيف. جهاز VirtIO
يمتلك جهاز SCMI إمكانية الوصول المباشر إلى أجهزة الاستشعار من خلال برامج تشغيل المستشعرات الخاصة بمجال المنظومة على الرقاقة (SoC).
الموقع الجغرافي لجهاز الاستشعار من HAL
يقع التنفيذ المرجعي لمستشعر HAL، والذي يستخدم VirtIO SCMI، في
device/google/trout/hal/sensors
ضبط طبقة تجريد الأجهزة (HAL) أداة الاستشعار
قد تحتاج أداة الاستشعار HAL إلى تعديل بيانات جهاز الاستشعار المُستلَمة من الجهاز الافتراضي (VM) للمضيف لتتوافق مع
نظام إحداثيات جهاز استشعار السيارة في Android يمكنك العثور على مخطط ضبط أداة الاستشعار في
device/google/trout/hal/sensors/2.0/config/sensor_hal_configuration.xsd
يمكن للمصنّعين الأصليين للأجهزة توفير إعدادات أداة الاستشعار، مثل الاتجاه والموقع،
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>
طبقة تجريد الأجهزة (HAL) في المركبة
يتألّف تنفيذ HAL للمركبة من مكوّنَين:
- العميل: توفّر هذه السياسة واجهات برمجة التطبيقات التي يستخدمها Android في واجهات AAOS الافتراضية.
- الخادم. يتصل مباشرةً بالأجهزة، مثل حافلات المركبات (أو محاكي).
في المحاكاة الافتراضية، يعمل خادم VHAL على الجهاز الافتراضي (VM) المضيف. يتصل عميل VHAL والخادم
من خلال GRPC-vsock
(لمزيد من المعلومات، يُرجى الاطّلاع على
device/google/trout/hal/vehicle/2.0/proto/VehicleServer.proto
). يمكن للمصنّعين الأصليين للأجهزة استخدام
غير بروتوكول GRPC من خلال تجاوز واجهات برمجة تطبيقات الاتصال. على سبيل المثال،
يمكنك الاطّلاع على device/google/trout/hal/vehicle/2.0/GrpcVehicle{Client,Server}.cpp
.
الأنظمة الفرعية الأخرى
يوفر VirtIO حاليًا واجهة محددة جيدًا للمكونات مثل كتلة التخزين
الشبكة، ووحدة التحكم، والإدخال، والمقبس، والإنتروبيا. بالنسبة لهذه الأنظمة الفرعية، يستخدم AAOS
برنامج التشغيل كما هو، مثل virtio-blk
وvirtio-input
virtio-console
، وvirtio-net
.
في المنصة المرجعية الافتراضية لنظام التشغيل AAOS، تتوفّر شبكة Wi-Fi من خلال mac80211_hwsim
.
لتفعيل شبكة لاسلكية VirtWifi
تستخدم بعد ذلك النفق virtio-net
لإرسال حركة بيانات الشبكة إلى الجهاز الافتراضي (VM) المضيف، الذي لديه إمكانية الوصول المباشر إلى شبكة Wi-Fi الفعلية.