นำองค์กร 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 ลงในพาร์ติชันที่บูตโหลดเดอร์เข้าถึงได้เมื่อรันไทม์ (ดูรายละเอียดใน [Partition DTs](#partition))

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

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

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

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

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

ตัวอย่างตำแหน่งของ DT หลัก

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

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

รูปที่ 1 ใส่ .dtbo ลงในพาร์ติชัน odm (ทําเช่นนี้เฉพาะในกรณีที่โปรแกรมโหลดบูตมีความสามารถในการโหลดข้อมูลจากระบบไฟล์ของพาร์ติชัน 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 หลัก ให้กําหนดป้ายกํากับ "ชื่อแทน" ที่เชื่อมโยงกับชื่อโหนดเดิม (เพื่อหลีกเลี่ยงการเปลี่ยนแปลง 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 ได้)

โปรดดูรายละเอียดที่หัวข้อVerified Boot