با ایمنی نمایشگر شروع کنید

این صفحه مروری بر دسترسی، ساخت و اجرای اجزای Display Safety، از جمله رندرکننده با قابلیت دسترسی بالا (HAR) ، DriverUI و مانیتور ایمنی ، در سراسر پلتفرم‌های Software Defined Vehicle (SDV) ارائه می‌دهد.

دسترسی به کد

این بخش به دسترسی به کدبیس برای کامپوننت‌های HAR و DriverUI Display Safety می‌پردازد.

رندرکننده با دسترسی بالا

کدبیس مربوط به رندرکننده با قابلیت دسترسی بالا (HAR) به عنوان بخشی از پرداخت مخزن اصلی در packages/services/display_safety/ در دسترس است.

کدبیس HAR به صورت زیر ساختار یافته است:

  • چارچوب: شامل رابط‌های اصلی چارچوب برای پلتفرم، رندر، انیمیشن و صدا است.
  • مرجع: شامل پیاده‌سازی‌های مختص پلتفرم برای رابط‌های چارچوب، و همچنین کد برنامه مرجع HAR و زنجیره ابزار ایمنی (کامپایلر طراحی، مانیتور ایمنی) است.
  • سرویس: سرویس‌های مخصوص اندروید برای ارسال و دریافت داده‌های خودرو بین اجزا و تعاریف مربوط به بسته‌های داده APEX.
  • پیش‌ساخته‌ها: پوشش‌هایی برای فایل‌های باینری پیش‌ساخته مانند کتابخانه گرافیکی Impeller فراهم می‌کند.

کد برنامه مرجع هری در packages/services/display_safety/reference/harry_app قرار دارد.

برای ساختار دقیق دایرکتوری HAR، به ساختار کد ایمنی نمایش مراجعه کنید.

مانیتور ایمنی

کدبیس مربوط به safety monitor به عنوان بخشی از پرداخت مخزن اصلی در packages/services/display_safety/reference/safety-monitor در دسترس است.

کد مانیتور ایمنی به شرح زیر ساختار یافته است:

  • main.rs : داده‌های مربوط به آشکارسازی را دریافت می‌کند، سرور داده‌های خودرو و حلقه‌های نظارت آشکارسازی را مقداردهی اولیه می‌کند. اطلاعات مربوط به قابلیت مشاهده آشکارسازی با نتایج بازرسی آشکارسازی مقایسه می‌شود و نتایج با استفاده از لاگ‌های SDV ارائه می‌شوند.
  • Vehicle_data_server.rs : سروری که داده‌های خودرو را دریافت می‌کند و قابلیت مشاهده‌ی حلقه‌ی اصلی را به‌روزرسانی می‌کند.
  • Telltale_monitoring.rs : در یک حلقه اجرا می‌شود، یک کپی از screenbuffer را با استفاده از screencap box دریافت می‌کند و مناطق مشخص شده را برای یافتن نشانه‌های خطا بررسی می‌کند. نتایج بررسی‌های نشانه‌های خطا سپس به حلقه اصلی ارسال می‌شود.

رابط کاربری درایور

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

برای اطلاعات بیشتر در مورد برنامه‌های غیربسته‌بندی‌شده و منبع گوگل، به بخش «ادغام برنامه‌های غیربسته‌بندی‌شده» مراجعه کنید.

ساخت و اجرا

این بخش جزئیات فرآیند کامپایل و اجرای اهداف HAR در SDV Media و DriverUI در SDV In-Vehicle Infotainment (IVI) را برای دستیابی به راهکار کامل کلاستر با SDV شرح می‌دهد.

ماشین‌های مجازی مهمان

شکل 1. ساختار دوگانه VM ایمنی نمایشگر.

ساخت هدف رسانه‌ای HAR و SDV

  • هدف رسانه پایه: sdv_media_cf
    • شرح: یک هدف اختصاصی برای پشته رسانه‌ای SDV، که تست جداگانه چارچوب‌های رسانه‌ای مختلف را تسهیل می‌کند.
    • مکان دایرکتوری: device/google/sdv/
  • هدف یکپارچه HAR: sdv_media_har_cf
    • شرح: این هدف، پشته رسانه را با HAR ادغام می‌کند و SDV Media را روی Cuttlefish اجرا می‌کند.
    • محل دایرکتوری: device/google/sdv_dsplay_safety/
    • اجرای ساخت:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

ساخت رابط کاربری درایور

از شاخه ub-automotive-master ، می‌توانید با استفاده از CommandLine یا AndroidStudio برنامه‌های unbundled بسازید.

در اندروید استودیو، فایل Gradle را وارد کنید: packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle

این پروژه اصلی Gradle با تمام برنامه‌های unbundled از جمله DriverUI است. پروژه را با استفاده از Gradle بسازید:

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

پس از ساخت موفقیت‌آمیز، فایل APK درایورUI در 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 اجرا می‌شوند.

ساخت هدف SDV IVI با DriverUI

  • هدف پایه: sdv_ivi_cf
    • شرح: این به عنوان هدف SDV بنیادی برای IVI در معماری x86-64 عمل می‌کند.
    • مکان دایرکتوری: device/google/sdv/
  • رابط کاربری درایور یکپارچه هدف: sdv_ivi_cf_ds

    • شرح: این هدف، پیکربندی پایه IVI را برای گنجاندن اجزای ایمنی نمایشگر گسترش می‌دهد. این هدف برای اعتبارسنجی خدمات ایمنی نمایشگر و تعاملات درون مجموعه ابزار ضروری است.
    • محل دایرکتوری: device/google/sdv_dsplay_safety/
    • افزودن فایل باینری DriverUI : DriverUI.apk به همراه فایل Blueprint Android.bp در packages/apps/Car/DriverUIPrebuilt کپی کنید.

      # 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,
    },
}
  • اجرای ساخت:

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

استقرار هدفمند

پس از اتمام موفقیت‌آمیز فرآیند ساخت برای هر دو هدف، ابزارهای Cuttlefish به راه‌اندازی اهداف، همانطور که در این بخش توضیح داده شده است، کمک می‌کنند.

استقرار SDV Media و HAR

هدف HAR با استفاده از پیکربندی از پیش تعریف شده sdv-media-config.json ایجاد می‌شود که در device/google/sdv_media_cf.mk مشخص شده است.

توجه : SDV Media و SDV IVI هر دو در حالت بوت Unlocked برای کلاستر Display Safety اجرا می‌شوند. برای اطلاعات بیشتر، به SDV Boot Mode مراجعه کنید.

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-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 Media VM با 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-trunk_staging-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. DriverUI به عنوان یک برنامه کلاستر ممتاز عمل می‌کند و از کلاس ClusterHomeManager (که با نام Cluster2 نیز شناخته می‌شود) بهره می‌برد.

رابط کاربری درایور در ماشین مجازی SDV-IVI

شکل ۳. نمایشگر ایمنی SDV IVI VM با DriverUI.

استقرار خوشه دوگانه ماشین مجازی

Cuttlefish قابلیت راه‌اندازی دو ماشین مجازی (VM) را با استفاده از پیکربندی دوگانه VM برای دستیابی به همپوشانی نمایش فراهم می‌کند.

ترکیب نمایش

شکل ۴. نمای کلی ترکیب نمایشگر ایمنی.

شما می‌توانید پیکربندی ماشین مجازی دوگانه را با استفاده از 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. خوشه کامل Display Safety با SDV Media و SDV IVI VM.

مانیتور ایمنی ساختمان

مانیتور ایمنی به طور پیش‌فرض برای هر یک از اهداف SDV Media ساخته شده است:

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-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