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