תחילת העבודה עם 'בטיחות ברשת המדיה'

בדף הזה מוסבר איך לגשת לרכיבי הבטיחות של התצוגה, ליצור אותם ולהפעיל אותם, כולל מנוע העיבוד בזמינות גבוהה (HAR), DriverUI ומעקב הבטיחות, בפלטפורמות של רכבים מוגדרי תוכנה (SDV).

גישה לקוד

בקטע הזה מוסבר איך מקבלים גישה לבסיס הקוד של רכיבי הבטיחות של HAR ו-DriverUI.

מנוע רינדור עם זמינות גבוהה

בסיס הקוד של מנוע העיבוד בזמינות גבוהה (HAR) זמין כחלק מהמאגר הראשי בכתובת packages/services/display_safety/.

בסיס הקוד של HAR בנוי כך:

  • Framework: מכיל ממשקי מסגרת ליבה לפלטפורמה, רינדור, אנימציה ואודיו.
  • קובץ עזר: מכיל הטמעות ספציפיות לפלטפורמה של ממשקי מסגרת, וגם את הקוד של אפליקציית העזר של HAR ואת ה-toolchain לבטיחות (Design Compiler, מעקב בטיחות).
  • שירות: שירותים ספציפיים ל-Android לשליחה וקבלה של נתוני רכב בין רכיבים, והגדרות לחבילות הנתונים של APEX.
  • Prebuilts: מספק wrappers לקובצי בינאריים שנוצרו מראש, כמו ספריית הגרפיקה Impeller.

הקוד של אפליקציית ההפניה של הארי נמצא בכתובת packages/services/display_safety/reference/harry_app.

כאן אפשר למצוא מידע מפורט על מבנה הספרייה של HAR.

מוניטור בטיחות

בסיס הקוד של בקרת הבטיחות זמין כחלק מהמאגר הראשי בכתובת packages/services/display_safety/reference/safety-monitor.

כך בנוי הקוד של בקר הבטיחות:

  • ‫main.rs: מאחזר פריטי מידע של נורות החיווי, מאתחל את שרת נתוני הרכב ואת לולאות המעקב של נורות החיווי. המידע על הנראות של נוריות החיווי מושווה לתוצאות הבדיקה של נוריות החיווי, והתוצאות מסופקות באמצעות יומני SDV.
  • ‫Vehicle_data_server.rs: השרת שמקבל את נתוני הרכב ומעדכן את החשיפה של נוריות החיווי בלולאה הראשית.
  • ‫Telltale_monitoring.rs: פועל בלולאה, מאחזר עותק של מאגר הנתונים הזמני של המסך באמצעות ארגז screencap, ובודק את האזורים שצוינו כדי לזהות סימנים. התוצאות של בדיקות הנוריות נשלחות ללולאה הראשית.

DriverUI

‫DriverUI זמין כחלק מבסיס קוד נפרד, שאפשר לגשת אליו מההסתעפות ub-automotive-master.

mkdir ub-automotive-master && cd ub-automotive-master
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
repo sync -cq

מידע נוסף על אפליקציות נפרדות ועל מקורות של Google זמין במאמר שילוב אפליקציות נפרדות.

פיתוח והפעלה

בקטע הזה מוסבר איך לקמפל ולהריץ את היעדים של ה-HAR ב-SDV Media ושל DriverUI במערכת מולטימדיה (IVI) ב-SDV כדי להשיג את הפתרון המלא של האשכול עם SDV.

מכונות וירטואליות של אורחים

איור 1. מבנה של שתי מכונות וירטואליות (VM) לבטיחות התצוגה.

יצירת יעד מדיה מסוג HAR ו-SDV

  • יעד בסיסי של מדיה: sdv_media_cf
    • תיאור: יעד ייעודי ל-SDV media stack, שמאפשר בדיקה מבודדת של מסגרות מדיה שונות.
    • מיקום הספרייה: device/google/sdv/
  • יעד משולב של HAR: sdv_media_har_cf
    • תיאור: היעד הזה משלב את מחסנית המדיה עם ה-HAR, ומפעיל את SDV Media ב-Cuttlefish.
    • מיקום הספרייה: device/google/sdv_display_safety/
    • הרצת ה-build:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j

פיתוח DriverUI

מההסתעפות ub-automotive-master, אתם יכולים ליצור אפליקציות לא מקובצות באמצעות CommandLine או AndroidStudio.

ב-Android Studio, מייבאים את קובץ Gradle: packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle

זהו פרויקט Gradle הראשי עם כל האפליקציות שלא נכללות בחבילה, כולל DriverUI. מפתחים את הפרויקט באמצעות Gradle:

# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble

אחרי שה-build מסתיים, ה-APK של DriverUI זמין בכתובת out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/ driver-ui-default-debug.apk

קוד DriverUI זמין בכתובת packages/apps/Car/DriverUI

הערה: DriverUI הוא מודול משנה של פרויקט Gradle הראשי, ולכן כל המשימות של Gradle מופעלות באמצעות aaos-apps-gradle-project.

יצירת יעד IVI של SDV באמצעות DriverUI

  • יעד בסיס: sdv_ivi_cf
    • תיאור: זהו יעד ה-SDV הבסיסי ל-IVI בארכיטקטורת x86-64.
    • מיקום הספרייה: device/google/sdv/
  • יעד משולב של DriverUI: sdv_ivi_cf_ds

    • תיאור: היעד הזה מרחיב את הגדרת ה-IVI הבסיסית כדי לשלב רכיבי בטיחות בתצוגה. היעד הזה חיוני לאימות של שירותי הבטיחות של התצוגה והאינטראקציות בתוך לוח המחוונים.
    • מיקום הספרייה: device/google/sdv_display_safety/
    • הוספת קובץ בינארי של DriverUI: מעתיקים את DriverUI.apk אל packages/apps/Car/DriverUIPrebuilt יחד עם קובץ Blueprint Android.bp.

      # Create a blueprint file, contents of this file are shown in the next step
      touch /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/Android.bp
      # Copy DriverUI.apk built
      cp /path/to/ub-automotive-master/out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/driver-ui-default-debug.apk /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/DriverUI.apk
      

צריך להגדיר את Android.bp כך שישתמש בשם המודול DriverUIPrebuilt ויחליף את DriverUIStubApp:

android_app_import {
    name: "DriverUIPrebuilt",
    overrides: ["DriverUIStubApp"],
    apk: "DriverUI.apk",
    privileged: true,
    product_specific: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.driverui"],

    optional_uses_libs: [
        "androidx.window.extensions",
        "androidx.window.sidecar",
    ],
    enforce_uses_libs: false,
    dex_preopt: {
        enabled: false,
    },
}
  • הרצת ה-build:

    # In the root of the Android source
    source build/envsetup.sh
    lunch sdv_ivi_cf_ds-aosp_current-userdebug
    m -j
    

פריסת היעד

אחרי שתהליך ה-build של שני היעדים מסתיים, כלי השירות של Cuttlefish עוזרים להפעיל את היעדים כמו שמתואר בקטע הזה.

פריסת SDV Media ו-HAR

יעד ה-HAR נוצר באמצעות ההגדרה המוגדרת מראש sdv-media-config.json, שצוינה בתוך device/google/sdv_media_cf.mk.

הערה: גם SDV Media וגם SDV IVI מופעלים במצב אתחול Unlocked ב-Display Safety cluster. מידע מפורט זמין במאמר מצב הפעלה של SDV.

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance1 androidboot.virt.address=3"

אחרי שיוצרים את הטרמינל, יופיעו בו יומנים לגישה ליעד בדפדפן ביציאה של localhost: ‏Point your browser to https://localhost:8443 to interact with the device.

HAR ב-SDV Media VM

איור 2. מכונה וירטואלית של מדיה ב-SDV עם HAR להצגת בטיחות.

פריסת SDV IVI ו-DriverUI

היעד SDV IVI DriverUI מופעל באמצעות sdv-ivi-config.json הקיים שמוגדר ב-device/google/sdv_ivi_cf.mk. אפשר גם לציין פרמטרים נוספים של הגדרות אתחול וממדי תצוגה מתאימים למסך של לוח המחוונים.

# In the root of the Android source
source build/envsetup.sh
lunch sdv_ivi_cf_ds-aosp_current-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance2 androidboot.virt.address=4" --display1=width=1920,height=720

אחרי שהיעד מופעל, בטרמינל מוצגים יומנים לגישה ליעד בדפדפן ביציאת localhost: ‏Point your browser to https://localhost:8443 to interact with the device.

פריסת היעדים של SDV-IVI ו-DriverUI מאתחלת שני מסכים: אחד למערכת SDV-IVI ואחד ל-DriverUI. ממשק המשתמש של הנהג פועל כאפליקציה בעלת הרשאות בלוח המחוונים, ומשתמש במחלקה ClusterHomeManager (שנקראת גם Cluster2).

DriverUI ב-SDV-IVI VM

איור 3. הצגת Safety SDV IVI VM עם DriverUI.

פריסת אשכול של שתי מכונות וירטואליות

ב-Cuttlefish אפשר להפעיל שתי מכונות וירטואליות (VM) באמצעות הגדרה של שתי מכונות וירטואליות כדי להשיג שכבת-על של תצוגה.

הצגת הקומפוזיציה

איור 4. סקירה כללית על הרכב התצוגה של Display Safety.

אפשר להפעיל את הגדרת המכונה הווירטואלית הכפולה באמצעות ds_toolkit שזמין בכתובת packages/services/display_safety/service/.

m ds_toolkit
ds_toolkit launch

אחרי שההגדרה מופעלת, בטרמינל מוצגים יומנים לגישה ליעד בדפדפן ביציאה של localhost: ‏Point your browser to https://localhost:8443 to interact with the device.

הפקודה הזו מפעילה את שני יעדי Cuttlefish באשכול שפועל באופן מלא, כששתי התצוגות של המכונות הווירטואליות מוצגות כשכבת-על.

הצגת כל אשכול הבטיחות

איור 5. הצגת אשכול מלא של בטיחות עם SDV Media ו-SDV IVI VM.

מוניטור לבטיחות בבניינים

כברירת מחדל, בקרת הבטיחות מיועדת לאחד משני יעדי המדיה של SDV:

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j

בזמן הריצה, בקר הבטיחות משתמש בקבוצת ברירת מחדל של פריטי מידע שנוצרו על ידי הקומפיילר ונארזו ב-APEX של תצוגת אשכול ההתייחסות.

יכול להיות שיווצרו פריטי מידע חדשים על ידי הפעלת har-design-compiler. הכלי הזה פועל ביעד כדי ליצור פריטי מידע מעיצוב. מומלץ להריץ את הכלי, לשלוף את פריטי המידע החדשים מהיעד ולבנות מחדש את קובץ האימג'. כברירת מחדל, הכלי נוצר ומותקן ביעד.

# Run the compiler on the target
adb shell har_design_compiler -c </path/to/artifacts> -o /data/local/tmp/
# Pull the artifacts to the local filesystem
adb pull data/local/tmp/artifacts services/harry-prebuilt/data/assets/
# Rebuild the image
m -j

מערכת הבקרה לבטיחות מופעלת כשהיעד מופעל. בקרת הבטיחות תפעל באופן רציף בלולאה כדי לאמת רכיבים קריטיים לבטיחות במסך בהשוואה למה שצפוי, על ידי ניתוח מאגר הנתונים הזמני של המסך ואותות נתוני הרכב הנכנסים.

אתם יכולים לצפות ביומנים של מעקב הבטיחות בכל שלב:

adb logcat | grep har-safety-monitor