ใช้ DTO

การใช้การวางซ้อนของแผนผังอุปกรณ์ (DTO) เกี่ยวข้องกับการแบ่งแผนผังอุปกรณ์ (DT), การสร้าง, การแบ่งพาร์ติชัน และการเรียกใช้ หลังจากใช้งานได้แล้ว คุณต้องรักษาความเข้ากันได้ระหว่าง DT ทั้ง 2 รายการ และกำหนดกลยุทธ์ในการรักษาความปลอดภัยของพาร์ติชัน DT แต่ละรายการด้วย

แบ่ง DT

เริ่มต้นด้วยการแบ่ง DT ออกเป็น 2 ส่วน ดังนี้

  • DT หลัก ส่วนที่ใช้ SoC เท่านั้นและการกำหนดค่าเริ่มต้นที่ผู้จำหน่าย SoC เป็นผู้กำหนด
  • DT การวางซ้อน การกำหนดค่าเฉพาะอุปกรณ์ที่ ODM/OEM เป็นผู้กำหนด

หลังจากแบ่ง DT แล้ว คุณต้องตรวจสอบความเข้ากันได้ระหว่าง DT หลักกับ DT การวางซ้อน เพื่อให้การผสานรวม DT หลักกับ DT การวางซ้อนส่งผลให้เกิด DT ที่สมบูรณ์สำหรับอุปกรณ์ ดูรายละเอียดเกี่ยวกับรูปแบบและกฎของ DTO ได้ที่ ไวยากรณ์ของ DTO ดูรายละเอียดเกี่ยวกับ DT หลายรายการได้ที่ ใช้ DT หลายรายการ

สร้าง DT หลักและ DT การวางซ้อน

วิธีสร้าง DT หลัก

  1. คอมไพล์ DT หลัก .dts เป็นไฟล์ .dtb
  2. แฟลชไฟล์ .dtb ลงในพาร์ติชันที่รันไทม์ของ Bootloader เข้าถึงได้ (รายละเอียดอยู่ในส่วน [แบ่งพาร์ติชัน DT](#partition))

วิธีสร้าง DT การวางซ้อน

  1. คอมไพล์ DT การวางซ้อน .dts เป็นไฟล์ .dtbo แม้ว่ารูปแบบไฟล์นี้จะเหมือนกับไฟล์ .dtb ที่จัดรูปแบบเป็น DT แบบแบน แต่ส่วนขยายไฟล์ที่แตกต่างกันจะแยกไฟล์นี้ออกจาก DT หลัก
  2. แฟลชไฟล์ .dtbo ลงในพาร์ติชันที่รันไทม์ของ Bootloader เข้าถึงได้ (รายละเอียดอยู่ในส่วน [แบ่งพาร์ติชัน DT](#partition))

ดูรายละเอียดเกี่ยวกับการคอมไพล์ด้วย DTC และการยืนยันผลลัพธ์ของ DTO ในโฮสต์ได้ที่ คอมไพล์และยืนยัน

แบ่งพาร์ติชัน DT

กำหนดตำแหน่งที่รันไทม์ของ Bootloader เข้าถึงได้และเชื่อถือได้ในหน่วยความจำแฟลช เพื่อใส่ .dtb และ .dtbo

ตัวอย่างตำแหน่งสำหรับ DT หลัก

  • เป็นส่วนหนึ่งของพาร์ติชันการบูต ซึ่งต่อท้ายเคอร์เนล (image.gz)
  • DT Blob (.dtb) แยกต่างหากในพาร์ติชันเฉพาะ (dtb)

ตัวอย่างตำแหน่งสำหรับ DT การวางซ้อน

รูปที่ 1 ใส่ .dtbo ลงในพาร์ติชัน odm (ทำเช่นนี้ก็ต่อเมื่อ Bootloader ของคุณมี ความสามารถในการโหลดข้อมูลจากระบบไฟล์ของพาร์ติชัน odm)

รูปที่ 2 ใส่ .dtbo ลงในพาร์ติชันที่ไม่ซ้ำกัน เช่น พาร์ติชัน dtbo

หมายเหตุ: ขนาดของพาร์ติชัน DT การวางซ้อนจะขึ้นอยู่กับอุปกรณ์และจำนวนการเปลี่ยนแปลงที่จำเป็นนอกเหนือจาก DT Blob หลัก โดยปกติแล้ว 8 MB ก็เพียงพอและมีพื้นที่ให้เพิ่มขึ้นในอนาคตหากจำเป็น

สำหรับอุปกรณ์ที่รองรับ การอัปเดตแบบราบรื่น (A/B) ให้ทำ A/B พาร์ติชัน DT หลักและ DT การวางซ้อน:

รูปที่ 3 พาร์ติชัน DTBO แบบ A/B ตัวอย่างที่ 1

รูปที่ 4 พาร์ติชัน DTBO แบบ A/B ตัวอย่างที่ 2

เรียกใช้ใน Bootloader

วิธีเรียกใช้

รูปที่ 5 การใช้งานรันไทม์ทั่วไปสำหรับ DTO ใน Bootloader

  1. โหลด .dtb จากพื้นที่เก็บข้อมูลลงในหน่วยความจำ
  2. โหลด .dtbo จากพื้นที่เก็บข้อมูลลงในหน่วยความจำ
  3. วางซ้อน .dtb ด้วย .dtbo เพื่อให้เป็น DT ที่ผสานรวม
  4. เริ่มเคอร์เนลโดยระบุที่อยู่หน่วยความจำของ DT ที่ผสานรวม

รักษาความเข้ากันได้

ระบบจะถือว่า DTB หลัก (จากผู้จำหน่าย SoC) เป็นพื้นผิว API สำหรับ DTBO หลังจากแยก DT ออกเป็นส่วนที่ใช้ร่วมกันของ SoC และส่วนเฉพาะอุปกรณ์แล้ว คุณต้องทำให้ทั้ง 2 ส่วนเข้ากันได้ในอนาคต ซึ่งรวมถึง

  • คำจำกัดความของ DT ใน DT หลัก เช่น โหนด พร็อพเพอร์ตี้ ป้ายกำกับ การเปลี่ยนแปลงคำจำกัดความใน DT หลักอาจทำให้เกิดการเปลี่ยนแปลงใน DT การวางซ้อน เช่น หากต้องการแก้ไขชื่อโหนดใน DT หลัก ให้กำหนดป้ายกำกับ "นามแฝง" ที่แมปกับชื่อโหนดเดิม (เพื่อหลีกเลี่ยงการเปลี่ยนแปลง DT การวางซ้อน)
  • ตำแหน่งพื้นที่เก็บข้อมูล DT การวางซ้อน เช่น ชื่อพาร์ติชัน รูปแบบพื้นที่เก็บข้อมูล

รักษาความปลอดภัย

Bootloader ต้องตรวจสอบว่า DTB หรือ DTBO ปลอดภัย ไม่มีการแก้ไข และไม่เสียหาย คุณสามารถใช้โซลูชันใดก็ได้เพื่อรักษาความปลอดภัย DTB หรือ DTBO เช่น ลายเซ็นรูปภาพการบูตใน VBoot 1.0 หรือ ส่วนท้ายของ HASH ของ AVB (VBoot 2.0)

  • หาก DTB หรือ DTBO อยู่ในพาร์ติชันที่ไม่ซ้ำกัน คุณสามารถเพิ่มพาร์ติชันนั้นลงในห่วงโซ่ความน่าเชื่อถือของ AVB ได้ ห่วงโซ่ความน่าเชื่อถือเริ่มต้นจากรากที่เชื่อถือได้ซึ่งได้รับการปกป้องด้วยฮาร์ดแวร์และไปยัง Bootloader ซึ่งจะยืนยันความสมบูรณ์และความถูกต้องของพาร์ติชัน DTB หรือ DTBO
  • หาก DTB หรือ DTBO อยู่ในพาร์ติชันที่มีอยู่ (เช่น พาร์ติชัน odm) พาร์ติชันนั้นควรอยู่ในห่วงโซ่ความน่าเชื่อถือของ AVB (พาร์ติชัน DTBO สามารถแชร์คีย์สาธารณะกับพาร์ติชัน odm ได้)

ดูรายละเอียดได้ที่การเปิดเครื่องที่ได้รับการยืนยัน