בדף הזה מוסבר איך לגשת לרכיבי הבטיחות של התצוגה, ליצור אותם ולהפעיל אותם, כולל מנוע העיבוד בזמינות גבוהה (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יחד עם קובץ BlueprintAndroid.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.

איור 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).

איור 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