หน้านี้แสดงภาพรวมสำหรับการเข้าถึง การสร้าง และการเรียกใช้คอมโพเนนต์ความปลอดภัยของจอแสดงผล ซึ่งรวมถึงโปรแกรมแสดงผลที่มีความพร้อมใช้งานสูง (HAR), DriverUI และเครื่องมือตรวจสอบความปลอดภัยในแพลตฟอร์ม Software Defined Vehicle (SDV)
การเข้าถึงโค้ด
ส่วนนี้ครอบคลุมการเข้าถึงฐานของโค้ดสำหรับคอมโพเนนต์ความปลอดภัยในการแสดงผล HAR และ DriverUI
โปรแกรมแสดงผลที่มีความพร้อมใช้งานสูง
ฐานของโค้ดสำหรับ High Availability Renderer (HAR) มีให้บริการเป็นส่วนหนึ่งของการชำระเงินในที่เก็บหลักที่ packages/services/display_safety/
ฐานของโค้ดสำหรับ HAR มีโครงสร้างดังนี้
- Framework: มีอินเทอร์เฟซเฟรมเวิร์กหลักสำหรับแพลตฟอร์ม การแสดงผล ภาพเคลื่อนไหว และเสียง
- ข้อมูลอ้างอิง: มีการติดตั้งใช้งานเฉพาะแพลตฟอร์มสำหรับอินเทอร์เฟซเฟรมเวิร์ก รวมถึงโค้ดสำหรับแอปอ้างอิง HAR และ Toolchain ความปลอดภัย (คอมไพเลอร์การออกแบบ, เครื่องมือตรวจสอบความปลอดภัย)
- บริการ: บริการเฉพาะ 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 แบบคู่ของ Safety
สร้างเป้าหมายสื่อ HAR และ SDV
- เป้าหมายสื่อพื้นฐาน:
sdv_media_cf- คำอธิบาย: เป้าหมายเฉพาะสำหรับสแต็กสื่อ SDV ซึ่งช่วยให้ทดสอบเฟรมเวิร์กสื่อต่างๆ แบบแยกต่างหากได้
- ตำแหน่งไดเรกทอรี:
device/google/sdv/
- เป้าหมายที่ผสานรวม HAR:
sdv_media_har_cf- คำอธิบาย: เป้าหมายนี้จะผสานรวมสแต็กสื่อกับ HAR โดยเรียกใช้ SDV Media ใน Cuttlefish
- ตำแหน่งไดเรกทอรี:
device/google/sdv_display_safety/ - การดำเนินการบิลด์:
# 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
หลังจากสร้างสำเร็จแล้ว 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
สร้างเป้าหมาย IVI ของ SDV ด้วย DriverUI
- เป้าหมายฐาน:
sdv_ivi_cf- คำอธิบาย: เป้าหมาย SDV พื้นฐานสำหรับ IVI ในสถาปัตยกรรม x86-64
- ตำแหน่งไดเรกทอรี:
device/google/sdv/
เป้าหมายที่ผสานรวม DriverUI:
sdv_ivi_cf_ds- คำอธิบาย: เป้าหมายนี้ขยายการกำหนดค่า IVI พื้นฐานเพื่อรวมคอมโพเนนต์ Display Safety เป้าหมายนี้จำเป็นสำหรับการตรวจสอบบริการด้านความปลอดภัยของจอแสดงผลและการโต้ตอบภายในแผงหน้าปัด
- ตำแหน่งไดเรกทอรี:
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,
},
}
การดำเนินการบิลด์:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-aosp_current-userdebug m -j
การติดตั้งใช้งานเป้าหมาย
เมื่อกระบวนการบิลด์สำหรับทั้ง 2 เป้าหมายเสร็จสมบูรณ์แล้ว ยูทิลิตี Cuttlefish จะช่วยเริ่มต้นเป้าหมายตามที่อธิบายไว้ในส่วนนี้
การติดตั้งใช้งานสื่อ SDV และ HAR
เป้าหมาย HAR สร้างขึ้นโดยใช้การกำหนดค่า sdv-media-config.json ที่กำหนดไว้ล่วงหน้า ซึ่งระบุไว้ภายใน device/google/sdv_media_cf.mk
หมายเหตุ: ทั้ง SDV Media และ SDV IVI จะเปิดตัวในโหมดเปิดเครื่อง Unlocked สำหรับแผงหน้าปัด Display Safety ดูข้อมูลโดยละเอียดได้ที่โหมดเปิดเครื่อง 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 แสดง VM สื่อ SDV ของ Safety ด้วย HAR
การติดตั้งใช้งาน SDV IVI และ DriverUI
เป้าหมาย DriverUI ของ IVI ใน SDV จะเริ่มต้นโดยใช้ 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 จะเริ่มต้นการแสดงผล 2 รายการ ได้แก่ การแสดงผลสำหรับระบบ SDV-IVI และการแสดงผลสำหรับ DriverUI DriverUI ทำงานเป็นแอปคลัสเตอร์ที่มีสิทธิ์ โดยใช้ประโยชน์จากคลาส ClusterHomeManager (หรือที่เรียกว่า Cluster2)

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

รูปที่ 4 ภาพรวมองค์ประกอบการแสดงผลของ Display Safety
คุณเปิดการกำหนดค่า 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 แสดงคลัสเตอร์ความปลอดภัยแบบเต็มพร้อมสื่อ SDV และ SDV IVI VM
จอภาพความปลอดภัยของอาคาร
ระบบตรวจสอบความปลอดภัยสร้างขึ้นโดยค่าเริ่มต้นสำหรับเป้าหมาย SDV Media อย่างใดอย่างหนึ่งต่อไปนี้
# 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