ডিসপ্লে সেফটি দিয়ে শুরু করুন

এই পৃষ্ঠাটি সফটওয়্যার ডিফাইন্ড ভেহিকেল (SDV) প্ল্যাটফর্ম জুড়ে হাই অ্যাভেইলেবিলিটি রেন্ডারার (HAR) , ড্রাইভারইউআই (DriverUI) , এবং সেফটি মনিটর সহ ডিসপ্লে সেফটি (Display Safety) উপাদানগুলি অ্যাক্সেস, বিল্ড এবং রান করার একটি সংক্ষিপ্ত বিবরণ প্রদান করে।

কোড অ্যাক্সেস

এই বিভাগে HAR এবং DriverUI ডিসপ্লে সেফটি কম্পোনেন্টগুলোর কোডবেসে অ্যাক্সেস পাওয়ার পদ্ধতি আলোচনা করা হয়েছে।

উচ্চ প্রাপ্যতা রেন্ডারার

হাই অ্যাভেইলেবিলিটি রেন্ডারার (HAR)-এর কোডবেসটি মূল রিপোজিটরি চেকআউটের অংশ হিসেবে packages/services/display_safety/ -এ পাওয়া যাবে।

HAR-এর কোডবেসটি নিম্নরূপভাবে গঠিত:

  • ফ্রেমওয়ার্ক: এতে প্ল্যাটফর্ম, রেন্ডারিং, অ্যানিমেশন এবং অডিওর জন্য মূল ফ্রেমওয়ার্ক ইন্টারফেসগুলো রয়েছে।
  • রেফারেন্স: এতে ফ্রেমওয়ার্ক ইন্টারফেসের প্ল্যাটফর্ম-নির্দিষ্ট ইমপ্লিমেন্টেশন, সেইসাথে HAR রেফারেন্স অ্যাপের কোড এবং সেফটি টুলচেইন (ডিজাইন কম্পাইলার, সেফটি মনিটর) অন্তর্ভুক্ত রয়েছে।
  • পরিষেবা: কম্পোনেন্টগুলোর মধ্যে গাড়ির ডেটা পাঠানো ও গ্রহণ করার জন্য অ্যান্ড্রয়েড-নির্দিষ্ট পরিষেবা, এবং APEX ডেটা প্যাকেজগুলোর সংজ্ঞা।
  • প্রি-বিল্টস: ইম্পেলার গ্রাফিক্স লাইব্রেরির মতো আগে থেকে তৈরি বাইনারিগুলোর জন্য র‍্যাপার সরবরাহ করে।

হ্যারি রেফারেন্স অ্যাপের কোডটি 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 crate ব্যবহার করে স্ক্রিনবাফারের একটি কপি সংগ্রহ করে এবং নির্দিষ্ট অঞ্চলগুলিতে টেলটেলের জন্য পরিদর্শন করে। এরপর টেলটেল পরিদর্শনের ফলাফল মূল লুপে পাঠানো হয়।

ড্রাইভারইউআই

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

আনবান্ডলড এবং গুগল সোর্স সম্পর্কে আরও তথ্যের জন্য, ‘আনবান্ডলড অ্যাপ ইন্টিগ্রেট করুন’ দেখুন।

নির্মাণ ও পরিচালনা

এই বিভাগে, SDV-এর সাথে সম্পূর্ণ ক্লাস্টার সলিউশন অর্জনের জন্য SDV Media-এর মধ্যে থাকা HAR এবং SDV In-Vehicle Infotainment (IVI)-এর মধ্যে থাকা DriverUI-এর টার্গেটগুলো কম্পাইল ও এক্সিকিউট করার প্রক্রিয়া বিস্তারিতভাবে বর্ণনা করা হয়েছে।

গেস্ট ভিএম

চিত্র ১. নিরাপত্তা দ্বৈত ভিএম কাঠামো প্রদর্শন।

HAR এবং SDV মিডিয়া টার্গেট তৈরি করুন

  • বেস মিডিয়া টার্গেট: sdv_media_cf
    • বিবরণ: এসডিভি মিডিয়া স্ট্যাকের জন্য একটি বিশেষ টার্গেট, যা বিভিন্ন মিডিয়া ফ্রেমওয়ার্কের বিচ্ছিন্ন পরীক্ষা সহজতর করে।
    • ডিরেক্টরির অবস্থান: device/google/sdv/
  • HAR সমন্বিত লক্ষ্য: sdv_media_har_cf
    • বিবরণ: এই টার্গেটটি HAR-এর সাথে মিডিয়া স্ট্যাককে একীভূত করে এবং Cuttlefish-এ SDV Media কার্যকর করে।
    • ডিরেক্টরির অবস্থান: 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 ব্রাঞ্চ থেকে, আপনি কমান্ডলাইন অথবা অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে আনবান্ডেলড অ্যাপ বিল্ড করতে পারেন।

অ্যান্ড্রয়েড স্টুডিওতে, এই গ্রেডল ফাইলটি ইম্পোর্ট করুন: packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle

এটি DriverUI সহ সমস্ত আনবান্ডেল করা অ্যাপ সম্বলিত মূল গ্রেডল প্রজেক্ট। গ্রেডল ব্যবহার করে প্রজেক্টটি বিল্ড করুন:

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

সফলভাবে বিল্ড সম্পন্ন হলে, DriverUI APK-টি 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 ব্যবহার করে চালানো হয়।

DriverUI দিয়ে SDV IVI টার্গেট তৈরি করুন

  • মূল লক্ষ্য: sdv_ivi_cf
    • বিবরণ: এটি x86-64 আর্কিটেকচারে IVI-এর জন্য ভিত্তিগত SDV টার্গেট হিসেবে কাজ করে।
    • ডিরেক্টরির অবস্থান: device/google/sdv/
  • DriverUI ইন্টিগ্রেটেড টার্গেট: 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
    

লক্ষ্যবস্তু মোতায়েন

উভয় টার্গেটের বিল্ড প্রক্রিয়া সফলভাবে সম্পন্ন হলে, এই বিভাগে বর্ণিত পদ্ধতি অনুযায়ী কাটলফিশ ইউটিলিটিগুলো টার্গেটগুলো চালু করতে সাহায্য করে।

এসডিভি মিডিয়া এবং এইচএআর স্থাপন

HAR টার্গেটটি পূর্বনির্ধারিত sdv-media-config.json কনফিগারেশন ব্যবহার করে তৈরি করা হয়, যা device/google/sdv_media_cf.mk মধ্যে নির্দিষ্ট করা থাকে।

দ্রষ্টব্য : ডিসপ্লে সেফটি ক্লাস্টারের জন্য SDV Media এবং SDV IVI উভয়ই Unlocked বুট মোডে চালু করা হয়। বিস্তারিত তথ্যের জন্য, SDV বুট মোড দেখুন।

# 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"

একবার তৈরি হয়ে গেলে টার্মিনালটি ব্রাউজারে লোকালহোস্ট পোর্টে টার্গেট অ্যাক্সেস করার জন্য লগ দেখাবে: Point your browser to https://localhost:8443 to interact with the device.

SDV Media VM-এ HAR

চিত্র ২. HAR সহ ডিসপ্লে সেফটি এসডিভি মিডিয়া ভিএম।

SDV IVI এবং DriverUI স্থাপন

SDV IVI DriverUI টার্গেটটি device/google/sdv_ivi_cf.mk এ সংজ্ঞায়িত বিদ্যমান sdv-ivi-config.json ব্যবহার করে চালু হয়। আপনি ক্লাস্টার স্ক্রিনের জন্য অতিরিক্ত বুট কনফিগারেশন প্যারামিটার এবং উপযুক্ত ডিসপ্লে ডাইমেনশনও নির্দিষ্ট করতে পারেন।

# 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

টার্গেটটি চালু করার পর, টার্মিনালটি লোকালহোস্ট পোর্টে ব্রাউজারে টার্গেটটি অ্যাক্সেস করার জন্য লগ দেখায়: Point your browser to https://localhost:8443 to interact with the device.

SDV-IVI এবং DriverUI টার্গেটগুলোর ডেপ্লয়মেন্ট দুটি ডিসপ্লে চালু করে: একটি SDV-IVI সিস্টেমের জন্য এবং অন্যটি DriverUI-এর জন্য। DriverUI একটি প্রিভিলেজড ক্লাস্টার অ্যাপ হিসেবে কাজ করে, যা ClusterHomeManager ক্লাস ( Cluster2 নামেও পরিচিত) ব্যবহার করে।

SDV-IVI VM-এ DriverUI

চিত্র ৩. DriverUI সহ Safety SDV IVI VM প্রদর্শন।

দ্বৈত ভিএম ক্লাস্টারের স্থাপন

ডিসপ্লে ওভারলে অর্জনের জন্য কাটলফিশ ডুয়াল ভিএম কনফিগারেশন ব্যবহার করে দুটি ভার্চুয়াল মেশিন (ভিএম) চালু করার সুবিধা প্রদান করে।

ডিসপ্লে কম্পোজিশন

চিত্র ৪। ডিসপ্লে সেফটি ডিসপ্লের গঠনের সংক্ষিপ্ত বিবরণ।

আপনি packages/services/display_safety/service/ -এ উপলব্ধ ds-toolkit ব্যবহার করে ডুয়াল ভিএম কনফিগারেশন চালু করতে পারেন।

m ds_toolkit
ds_toolkit launch

কনফিগারেশন চালু করার পরে, টার্মিনালটি লোকালহোস্ট পোর্টে ব্রাউজারে টার্গেট অ্যাক্সেস করার জন্য লগ দেখায়: Point your browser to https://localhost:8443 to interact with the device.

এটি উভয় কাটলফিশ টার্গেটকে একটি সম্পূর্ণ কার্যকর ক্লাস্টারে চালু করে, যেখানে উভয় ভার্চুয়াল মেশিনের ডিসপ্লে একে অপরের উপর স্থাপিত থাকে।

ডিসপ্লে সেফটি ফুল ক্লাস্টার

চিত্র ৫। SDV Media এবং SDV IVI VM সহ Safety পূর্ণ ক্লাস্টার প্রদর্শন।

ভবন নিরাপত্তা পর্যবেক্ষক

সেফটি মনিটরটি ডিফল্টরূপে এসডিভি মিডিয়া টার্গেট উভয়ের জন্যই তৈরি করা থাকে:

# 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