หน้านี้ให้ภาพรวมสำหรับการเข้าถึง สร้าง และเรียกใช้ คอมโพเนนต์ความปลอดภัยของจอแสดงผล ซึ่งรวมถึง ตัวแสดงผลความพร้อมใช้งานสูง (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: ดึงข้อมูลอาร์ติแฟกต์บอกเล่า เริ่มต้นเซิร์ฟเวอร์ข้อมูลยานพาหนะ และวนซ้ำการตรวจสอบบอกเล่า ระบบจะเปรียบเทียบข้อมูลเกี่ยวกับความสามารถในการมองเห็นบอกเล่ากับผลการตรวจสอบบอกเล่า และแสดงผลลัพธ์โดยใช้บันทึก SDVVehicle_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

รูปที่ 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พร้อมกับไฟล์ 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,
},
}
การดำเนินการบิลด์:
# 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.

รูปที่ 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)

รูปที่ 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