באמצעות מוצר חדש בשם trout
, Android Automotive (AAOS) תומך עכשיו בפריסה כמכונה וירטואלית (VM) של אורח בסביבות שתואמות לתקן VirtIO. trout
מבוסס על פלטפורמת העזרה הווירטואלית Cuttlefish, והוא זמין בתצורת המכשיר trout
. קוד המקור של מרחב המשתמש נמצא בכתובת device/google/trout
. בטבלה הבאה מתוארת הטכנולוגיה שמשמשת לווירטואליזציה של כל אחד מהתת-מערכות ב-trout
.
תכונה | טכנולוגיה |
---|---|
Audio Control HAL | vsock/gRPC |
Audio HAL | virtio-snd |
Bluetooth | 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 |
Extend trout
אפשר להשתמש ב-trout
כנקודת התחלה ליצירת טירגטים חדשים של Android למערכת מידע ובידור ברכב (IVI). התשתית ל-build תוכננה כך שאפשר להרחיב אותה ולהתאים אותה אישית.
לדוגמה:
# 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 ...]
אפשר להחליף כמה HAL של Android בנפרד בהטמעות בהתאמה אישית, או לשמור על ההטמעות שמוגדרות כברירת מחדל אבל לשנות פרמטרים מסוימים בהגדרות כדי ליצור תקשורת תקינה בין מכונות וירטואליות בסביבת היעד. ממשקי ה-HAL האלה (כולל Vehicle HAL, Audio Control HAL ו-Dumpstate HAL) מיושמים באמצעות ממשק gRPC שמבוסס על חיבור vsock
בין האורח ב-AAOS לבין מערכת המארח שמספקת את הטמעת התכונות הבסיסית. כדי להגדיר אותם, צריך לספק את פרמטרי החיבור המתאימים של vsock
כמאפייני ספק. קוד המקור הוא המקור האמין ביותר לגבי המאפיינים שזמינים להגדרה והסמנטיקה שלהם.
פיתוח גרסת build
הידור מרחב המשתמש
כדי לקמפל את מרחב המשתמש:
- מורידים את עץ המקור של 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 ב-upstream, עם הוספה של מודולים ספציפיים ל-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 כוללים כשלים בבדיקה:
בדיקת Car Launcher בדיקת מפרסם של Bluetooth עם צריכת אנרגיה נמוכה (BLE) בדיקת אימות איכות וידאו בסטרימינג בדיקת מכשיר Bluetooth HID בדיקת מיקרופון HiFi אולטרסאונד בדיקת רמקול HiFi אולטרסאונד |
בדיקה נדרשת למכשיר פתוח בדיקה של זיהוי חיישנים דינמיים בדיקה של חיישן מחוץ לגוף בדיקה של תנועה משמעותית בדיקה של התראת ניתוב פלט אודיו בדיקה של בקשה או הצעה לרשת |
נתוני גרסה
ב-trout
1.1 יש את הבעיות המוכרות הבאות:
- גרסאות build של
trout
למשתמשים לא זמינות. המערכת בנויה בתור-userdebug
, וזה יכול להשפיע על חלק מבדיקות CTS. - אין תמיכה ב-Android Verified Boot (AVB).
- יכול להיות שחלק מהתת-מערכות של Android לא יהיו זמינות, כולל secure world ו-NNHAL.
- בדרך כלל, הגישה לרשת האורחים ניתנת באמצעות מתאם Wi-Fi וירטואלי מנהרה של
virtio-net
. הקישוריות בצד המארח תלויה בפריסה הספציפית של hypervisor. - יכול להיות שבחלק מההטמעות תהיה יכולת Bluetooth מוגבלת או שאין כלל יכולת Bluetooth.
- יכול להיות שהחדרת אירוע VHAL לא תפעל בחלק מהחיישנים.
- עומסי עבודה כבדים מסוימים עלולים לגרום לשיבושים בהפעלת האודיו.
- בהטמעות מסוימות, הפעלה מחדש של adb של האורח ב-AAOS עשויה להפעיל מחדש את המערכת כולה.
- STS עלול לגרום לאי יציבות במערכת ולחייב הפעלה מחדש.
פרטים נוספים זמינים בנתוני הגרסה של השותף לפריסה הספציפית של trout
.