פלטפורמת עזר

באמצעות מוצר חדש בשם 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

הידור מרחב המשתמש

כדי לקמפל את מרחב המשתמש:

  1. מורידים את עץ המקור של Android:
    repo init -u https://android.googlesource.com/platform/manifest -b main
    repo sync -j8
    
  2. יוצרים את הסביבה:
    source build/envsetup.sh
    lunch aosp_trout_arm64-userdebug
    make -j24
    

פיתוח הליבה

ב-trout 1.1, קוד הליבה מסופק ב-AOSP. הליבה של trout מורכבת מאותו קוד כמו ACK 5.10 ב-upstream, עם הוספה של מודולים ספציפיים ל-trout למערכות המשנה של VirtIO.

  1. כדי לשכפל את הליבה, מריצים את הפקודה:
    repo init https://android.googlesource.com/kernel/manifest -b trout-android12-5.10 && repo sync
    
  2. כדי ליצור את הליבה, מריצים את הפקודה:
    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.