من خلال منتج جديد باسم trout، يوفّر Android Automotive (AAOS) الآن إمكانية النشر كآلة افتراضية للضيف في بيئات متوافقة مع معيار VirtIO. trout يستند إلى منصة
Cuttlefish
المرجعية الافتراضية ويتوفّر كإعداد لجهاز trout. يمكن العثور على رمز مصدر مساحة المستخدم في device/google/trout. يصف الجدول أدناه التكنولوجيا المستخدَمة لمحاكاة كل نظام فرعي في trout.
| الميزة | تكنولوجيا |
|---|---|
| Audio Control HAL | vsock/gRPC |
| Audio HAL | virtio-snd |
| البلوتوث | virtio-console |
| Dumpstate HAL | vsock/gRPC |
| نظام العرض الموسّع (EVS) | virtio-video |
| وضع المرآب | vsock/gRPC |
| الرسومات | virtio-gpu |
| النظام العالمي للملاحة عبر الأقمار الصناعية (GNSS) | virtio-console |
| Sensor HAL 2.0 | virtio-scmi and IIO |
| الإدخال عبر الشاشة التي تعمل باللمس | virtio-input |
| Vehicle HAL | vsock/gRPC |
توسيع نطاق `trout`
يمكن استخدام trout كنقطة بداية لإنشاء أهداف Android جديدة لنظام المعلومات والترفيه داخل المركبة (IVI). تم تصميم البنية الأساسية للإصدار بحيث يمكن توسيع نطاقها وتخصيصها.
على سبيل المثال:
# Inherit trout-arm64 default values and settings
$(call inherit-product, device/google/trout/aosp_trout_arm64.mk)
# Customize HALs as needed
LOCAL_VHAL_PRODUCT_PACKAGE := vendor.oem.vhal@2.0-service
LOCAL_AUDIO_PRODUCT_PACKAGE := vendor.oem.audio@6.0-impl
# Configure SELinux policy
BOARD_SEPOLICY_DIRS += device/oem/car/sepolicy/vendor/oem
# Configure properties
LOCAL_DUMPSTATE_PROPERTIES := \
ro.vendor.dumpstate.server.cid=22 \
ro.vendor.dumpstate.server.port=406 \
ro.vendor.helpersystem.log_loc=/data/dumpstate
[... and more as needed ...]
يمكن استبدال العديد من واجهات Android HAL بشكل فردي بتنفيذات مخصّصة، أو الاحتفاظ بالتنفيذات التلقائية ولكن تعديل بعض مَعلمات الإعداد لإنشاء اتصال مناسب بين الآلات الافتراضية في البيئة المستهدَفة. يتم تنفيذ واجهات HAL هذه (بما في ذلك طبقة تجريد الأجهزة في المركبة وAudio Control HAL وDumpstate HAL) من خلال واجهة gRPC مدعومة باتصال vsock بين ضيف نظام التشغيل Android Automotive ونظام مضيف يوفّر التنفيذ الأساسي للميزة. يجب ضبط هذه الواجهات من خلال توفير مَعلمات اتصال vsock المناسبة كخصائص للمورّد. يمثّل رمز المصدر الحقيقة المطلقة بشأن الخصائص المتاحة للإعداد ودلالاتها.
إنشاء `trout`
تجميع مساحة المستخدم
لتجميع مساحة المستخدم، اتّبِع الخطوات التالية:
- نزِّل شجرة مصدر Android:
repo init -u https://android.googlesource.com/platform/manifest -b main repo sync -j8
- أنشئ البيئة:
source build/envsetup.sh lunch aosp_trout_arm64-userdebug make -j24
إنشاء النواة
بالنسبة إلى trout 1.1، يتم توفير قاعدة رموز النواة في AOSP. تتألف نواة trout
من الرمز نفسه الذي يتألف منه ACK 5.10، بالإضافة إلى وحدات خاصة بـ
trout- للأنظمة الفرعية VirtIO.
- لاستنساخ النواة، شغِّل الأمر التالي:
repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
- لإنشاء النواة، شغِّل الأمر التالي:
BUILD_CONFIG=common-modules/virtual-device/build.config.trout.coqos build/build.sh
قد يكون لدى مورّد برنامج Hypervisor إعداد مختلف للنواة مطلوب أو وحدات إضافية يجب تجميعها. احرص على اتّباع هذه الإرشادات المحدّدة، إذا تم توفيرها.
الامتثال
عندما يتم تشغيل AAOS كآلة افتراضية للضيف، هدفنا هو أن يكون نشر Android متوافقًا من منظور الإطار. تندرج المشاكل من جهة المضيف ضمن نطاق كل عملية تنفيذ وخارج نطاق trout 1.1.
لم نجرِ عملية تحقّق إضافية من xTS على trout 1.1. يُرجى مواصلة الرجوع إلى المناقشة أدناه بشأن دعم CTS في trout 1.0.
في trout 1.0، لا تزال هناك عدة مشاكل في CTS. من المعروف أنّ وحدات CTS التالية تتضمّن حالات فشل في الاختبارات:
| CtsStagedInstallHostTestCases CtsRollbackManagerHostTestCases CtsVideoTestCases CtsHostsideNetworkTests CtsActivityManagerBackgroundActivityTestCases CtsAdbHostTestCases CtsNativeHardwareTestCases CtsContentTestCases CtsCarHostTestCases CtsOsTestCases CtsStatsdHostTestCases CtsVoiceInteractionTestCases CtsViewTestCases CtsCameraTestCases CtsLocationGnssTestCases CtsGraphicsTestCases CtsIncidentHostTestCases CtsInstallHostTestCases CtsNativeVerifiedBootTestCases CtsNetTestCases |
CtsWindowManagerDeviceTestCases CtsMediaStressTestCases CtsAppTestCases CtsUsbTests CtsAutoFillServiceTestCases CtsDisplayTestCases CtsMediaTestCases CtsDeqpTestCases CtsDumpsysHostTestCases CtsOpenGLTestCasesCtsLibcoreTestCases CtsSecurityHostTestCases CtsInputMethodTestCases CtsStatsdAtomHostTestCases CtsPermission4TestCases CtsNNAPIBenchmarkTestCases CtsSimpleperfTestCases CtsAccessibilityTestCases CtsAppSecurityHostTestCases CtsKeystoreTestCases |
من المعروف أنّ مناطق CTS-V التالية تتضمّن حالات فشل في الاختبارات:
| اختبار مشغّل السيارة اختبار أداة الإعلان عن البلوتوث منخفض الطاقة (BLE) أداة التحقّق من جودة بث الفيديو اختبار جهاز Bluetooth HID اختبار ميكروفون الصوت العالي التردد اختبار مكبّر الصوت العالي التردد |
اختبار الجهاز المطلوب غير مقفل اختبار اكتشاف أداة الاستشعار الديناميكية اختبار أداة الاستشعار خارج الجسم اختبار الحركة الكبيرة اختبار إشعار توجيه الإخراج الصوتي اختبار طلب الشبكة أو اقتراحها |
ملاحظات الإصدار
يتضمّن trout 1.1 المشاكل المعروفة التالية:
- لا تتوفّر إصدارات المستخدم من
trout. يتم إنشاء النظام على أنّه-userdebug، ما قد يؤثر في بعض اختبارات CTS. - لا يتوافق النظام مع ميزة "التشغيل المتحقّق منه في Android" (AVB).
- قد لا تتوفّر بعض الأنظمة الفرعية في Android، بما في ذلك العالم الآمن وNNHAL.
- يتم توفير إمكانية الوصول إلى شبكة الضيف بشكل عام من خلال محوّل Wi-Fi محاكٍ و
نفق
virtio-net. يعتمد الاتصال من جهة المضيف على عملية نشر برنامج Hypervisor المحدّدة. - قد توفّر بعض عمليات التنفيذ إمكانات محدودة أو لا توفّر أي إمكانات للبلوتوث.
- قد لا ينجح إدخال حدث VHAL لبعض أجهزة الاستشعار.
- يمكن أن تؤدي بعض أحمال العمل الكبيرة إلى حدوث أعطال في تشغيل الصوت.
- في بعض عمليات التنفيذ، قد تؤدي إعادة تشغيل ضيف AAOS باستخدام adb إلى إعادة تشغيل النظام بأكمله.
- يمكن أن يؤدي STS إلى عدم استقرار النظام ويتطلّب إعادة تشغيله.
لمزيد من التفاصيل، يُرجى الرجوع إلى ملاحظات إصدار الشريك لعملية نشر trout المحدّدة.