ใช้ DTO

การใช้การซ้อนทับ Device Tree (DTO) เกี่ยวข้องกับการแบ่ง Device Tree (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 (ดูรายละเอียดใน [Partition DTs](#partition))

วิธีสร้าง DT แบบซ้อนทับ

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

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

DT ของพาร์ติชัน

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

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

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

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

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

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

หมายเหตุ: ขนาดของพาร์ติชัน DT แบบซ้อนทับจะขึ้นอยู่กับอุปกรณ์และจำนวนการเปลี่ยนแปลงที่จำเป็นนอกเหนือจาก Blob DT หลัก โดยปกติแล้ว 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 หลัก ให้กำหนดป้ายกำกับ "alias" ที่ แมปกับชื่อโหนดเดิม (เพื่อหลีกเลี่ยงการเปลี่ยนแปลง DT การซ้อนทับ)
  • วางซ้อนตำแหน่งร้านค้า DT เช่น ชื่อพาร์ติชัน รูปแบบร้านค้า

ตรวจสอบความปลอดภัย

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

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

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