เริ่มต้นใช้งานความปลอดภัยของโฆษณา Display

หน้านี้ให้ภาพรวมสำหรับการเข้าถึง สร้าง และเรียกใช้ คอมโพเนนต์ความปลอดภัยของจอแสดงผล ซึ่งรวมถึง ตัวแสดงผลความพร้อมใช้งานสูง (HAR), DriverUI และ มอนิเตอร์ความปลอดภัยใน แพลตฟอร์มยานพาหนะที่กำหนดโดยซอฟต์แวร์ (SDV)

การเข้าถึงโค้ด

ส่วนนี้ครอบคลุมการเข้าถึงฐานของโค้ดสำหรับคอมโพเนนต์ความปลอดภัยของจอแสดงผล HAR และ DriverUI

ตัวแสดงผลความพร้อมใช้งานสูง

ฐานของโค้ดสำหรับตัวแสดงผลความพร้อมใช้งานสูง (HAR) พร้อมใช้งานเป็นส่วนหนึ่งของ การ เช็กเอาต์ที่เก็บข้อมูลหลัก ที่ packages/services/display_safety/

ฐานของโค้ดสำหรับ HAR มีโครงสร้างดังนี้

  • เฟรมเวิร์ก: มีอินเทอร์เฟซเฟรมเวิร์กหลักสำหรับแพลตฟอร์ม การแสดงผล ภาพเคลื่อนไหว และเสียง
  • ข้อมูลอ้างอิง: มีการใช้งานเฉพาะแพลตฟอร์มสำหรับอินเทอร์เฟซเฟรมเวิร์ก รวมถึงโค้ดสำหรับแอปข้อมูลอ้างอิง HAR และเครื่องมือความปลอดภัย (คอมไพเลอร์การออกแบบ, มอนิเตอร์ความปลอดภัย)
  • บริการ: บริการเฉพาะของ Android สำหรับการส่งและรับข้อมูลยานพาหนะระหว่างคอมโพเนนต์ และคำจำกัดความสำหรับแพ็กเกจข้อมูล APEX
  • Prebuilts: มี Wrapper สำหรับไบนารีที่สร้างไว้ล่วงหน้า เช่น ไลบรารีกราฟิก Impeller

โค้ดแอปข้อมูลอ้างอิง Harry อยู่ที่ 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

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

VM ของแขกรับเชิญ

รูปที่ 1 โครงสร้าง VM คู่ของความปลอดภัยของจอแสดงผล

สร้างเป้าหมาย HAR และ SDV Media

  • เป้าหมายสื่อพื้นฐาน: 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

สร้าง DriverUI

จากสาขา ub-automotive-master คุณสามารถสร้างแอปที่ไม่ได้รวมไว้โดยใช้ บรรทัดคำสั่ง หรือ Android Studio

ใน 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

หลังจากสร้างสำเร็จแล้ว 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

สร้างเป้าหมาย SDV IVI ด้วย DriverUI

  • เป้าหมายพื้นฐาน: sdv_ivi_cf
    • คำอธิบาย: เป้าหมายนี้ทำหน้าที่เป็นเป้าหมาย SDV พื้นฐานสำหรับ IVI ในสถาปัตยกรรม x86-64
    • ตำแหน่งไดเรกทอรี: device/google/sdv/
  • เป้าหมายที่ผสานรวม DriverUI: sdv_ivi_cf_ds

    • คำอธิบาย: เป้าหมายนี้ขยายการกำหนดค่า IVI พื้นฐานเพื่อรวมคอมโพเนนต์ความปลอดภัยของจอแสดงผล เป้าหมายนี้มีความสำคัญอย่างยิ่งสำหรับการตรวจสอบบริการและการโต้ตอบความปลอดภัยของจอแสดงผลภายในแผงหน้าปัด
    • ตำแหน่งไดเรกทอรี: device/google/sdv_dsplay_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,
    },
}
  • การดำเนินการบิลด์:

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

การติดตั้งใช้งานเป้าหมาย

เมื่อกระบวนการสร้างเป้าหมายทั้ง 2 รายการเสร็จสมบูรณ์แล้ว ยูทิลิตี Cuttlefish จะช่วยเริ่มต้นเป้าหมายตามที่อธิบายไว้ในส่วนนี้

การติดตั้งใช้งาน SDV Media และ HAR

ระบบจะสร้างเป้าหมาย 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"

เมื่อสร้างแล้ว เทอร์มินัลจะแสดงบันทึกเพื่อเข้าถึงเป้าหมายในเบราว์เซอร์บนพอร์ต localhost: Point your browser to https://localhost:8443 to interact with the device.

HAR ใน SDV Media VM

รูปที่ 2 VM ของ SDV Media ความปลอดภัยของจอแสดงผลพร้อม 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 จะเริ่มต้นจอแสดงผล 2 จอ ได้แก่ จอแสดงผลสำหรับระบบ SDV-IVI และอีกจอแสดงผลสำหรับ DriverUI DriverUI ทำงานเป็นแอปคลัสเตอร์ที่มีสิทธิ์ โดยใช้ ClusterHomeManager คลาส (หรือที่เรียกว่า Cluster2)

DriverUI ใน VM ของ SDV-IVI

รูปที่ 3 VM ของ SDV IVI ความปลอดภัยของจอแสดงผลพร้อม DriverUI

การติดตั้งใช้งานคลัสเตอร์ VM คู่

Cuttlefish มีความสามารถในการเปิดตัวเครื่องเสมือน (VM) 2 เครื่องโดยใช้การกำหนดค่า VM คู่เพื่อให้ได้การวางซ้อนจอแสดงผล

การจัดวางองค์ประกอบของจอแสดงผล

รูปที่ 4 ภาพรวมการจัดองค์ประกอบจอแสดงผลความปลอดภัยของจอแสดงผล

คุณสามารถเปิดตัวการกำหนดค่า 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 ทั้ง 2 รายการในคลัสเตอร์ที่ทำงานได้อย่างสมบูรณ์ โดยมีการวางซ้อนจอแสดงผลของเครื่องเสมือนทั้ง 2 เครื่อง

แสดงคลัสเตอร์ความปลอดภัยทั้งหมด

รูปที่ 5 คลัสเตอร์ความปลอดภัยของจอแสดงผลที่สมบูรณ์พร้อม VM ของ SDV Media และ SDV IVI

การสร้างมอนิเตอร์ความปลอดภัย

ระบบจะสร้างมอนิเตอร์ความปลอดภัยโดยค่าเริ่มต้นสำหรับเป้าหมาย 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