การใช้ DTO เกี่ยวข้องกับการแบ่งแผนผังอุปกรณ์ การสร้าง การแบ่งพาร์ติชัน และการรัน หลังจากที่คุณใช้งานแล้ว คุณต้องรักษาความเข้ากันได้ระหว่าง DT ทั้งสองตัว และกำหนดกลยุทธ์ในการรับรองความปลอดภัยของพาร์ติชัน DT แต่ละพาร์ติชัน
การแบ่ง DT
เริ่มต้นด้วยการแบ่งแผนผังอุปกรณ์ออกเป็นสอง (2) ส่วน:
- ดีทีหลัก . ส่วน SoC เท่านั้นและการกำหนดค่าเริ่มต้นที่จัดทำโดยผู้จำหน่าย SoC
- โอเวอร์เลย์ DT การกำหนดค่าเฉพาะอุปกรณ์ จัดทำโดย ODM/OEM
หลังจากแบ่งแผนผังอุปกรณ์แล้ว คุณต้องตรวจสอบให้แน่ใจว่าเข้ากันได้ระหว่าง DT หลักและ DT แบบโอเวอร์เลย์ เพื่อให้การรวม DT หลักและ DT แบบโอเวอร์เลย์เข้าด้วยกันส่งผลให้ได้ DT ที่สมบูรณ์สำหรับอุปกรณ์ สำหรับรายละเอียดเกี่ยวกับรูปแบบและกฎของ DTO โปรดดู ไวยากรณ์ของ DTO สำหรับรายละเอียดเกี่ยวกับแผนผังอุปกรณ์หลายรายการ โปรดดูที่ DT หลายรายการ
การสร้าง DT หลักและโอเวอร์เลย์
ในการสร้าง DT หลัก:
- รวบรวม DT
.dts
หลักเป็นไฟล์ ..dtb
- แฟลชไฟล์
.dtb
ลงในพาร์ติชันที่เข้าถึงได้แบบรันไทม์ของ bootloader (รายละเอียดด้านล่าง)
วิธีสร้างโอเวอร์เลย์ DT:
- คอมไพล์โอเวอร์เลย์ DT
.dts
ลงในไฟล์.dtbo
แม้ว่ารูปแบบไฟล์นี้จะเหมือนกับไฟล์.dtb
ที่จัดรูปแบบเป็นแผนผังอุปกรณ์แบบแบน แต่นามสกุลไฟล์ที่แตกต่างกันจะแยกความแตกต่างจาก DT หลัก - แฟลชไฟล์
.dtbo
ลงในพาร์ติชันที่เข้าถึงได้แบบรันไทม์ของ bootloader (ตามรายละเอียดด้านล่าง)
สำหรับรายละเอียดเกี่ยวกับการคอมไพล์ด้วย DTC และการตรวจสอบผลลัพธ์ DTO บนโฮสต์ โปรดดูที่ การคอมไพล์และการตรวจสอบ
การแบ่งพาร์ติชัน DT
กำหนดตำแหน่งที่เชื่อถือได้และเข้าถึงรันไทม์ของ bootloader ในหน่วยความจำแฟลชเพื่อใส่ .dtb
และ .dtbo
ตัวอย่างสถานที่สำหรับ DT หลัก:
- ส่วนหนึ่งของพาร์ติชันสำหรับเริ่มระบบต่อท้ายเคอร์เนล (
image.gz
) - แยก DT blobs (
.dtb
) ในพาร์ติชันเฉพาะ (dtb
)
ตำแหน่งตัวอย่างสำหรับโอเวอร์เลย์ DT:
พาร์ติชันที่ไม่ซ้ำ |
---|
พาร์ติชัน ODM |
---|
.dtbo
ลงในพาร์ติชัน odm
(ทำสิ่งนี้เฉพาะในกรณีที่โปรแกรมโหลดบูตของคุณมีความสามารถในการโหลดข้อมูลจากระบบไฟล์ของพาร์ odm
)หมายเหตุ: ขนาดของพาร์ติชัน DT ที่ซ้อนทับนั้นขึ้นอยู่กับอุปกรณ์และจำนวนการเปลี่ยนแปลงที่จำเป็นที่ด้านบนของ DT blob หลัก โดยทั่วไปแล้ว 8 MB นั้นเกินพอและช่วยให้มีพื้นที่เพิ่มขึ้นในอนาคตหากจำเป็น
สำหรับอุปกรณ์ที่รองรับ การอัปเดตที่ราบรื่น (A/B) ให้ทำ A/B พาร์ติชัน DT หลักและโอเวอร์เลย์ DT:
ตัวอย่างที่ 1 |
---|
ตัวอย่างที่ 2 |
---|
ทำงานใน bootloader
วิ่ง:
- โหลด
.dtb
จากที่เก็บข้อมูลลงในหน่วยความจำ - โหลด
.dtbo
จากที่เก็บข้อมูลลงในหน่วยความจำ - ซ้อนทับ
.dtb
ด้วย.dtbo
เพื่อเป็น DT ที่ผสานกัน - เริ่มเคอร์เนลโดยระบุที่อยู่หน่วยความจำของ DT ที่รวมเข้าด้วยกัน
การรักษาความเข้ากันได้
DTB หลัก (จากผู้จำหน่าย SoC) จะถือเป็นพื้นผิว API สำหรับ DTBO หลังจากแยกโครงสร้างอุปกรณ์ออกเป็นส่วน SoC ทั่วไปและชิ้นส่วนเฉพาะอุปกรณ์แล้ว คุณต้องรักษาทั้งสองส่วนให้ใช้งานร่วมกันได้ในอนาคต ซึ่งรวมถึง:
- คำจำกัดความของ DT ใน DT หลัก (เช่น โหนด คุณสมบัติ ป้ายกำกับ) การเปลี่ยนแปลงคำจำกัดความใน DT หลักอาจทำให้เกิดการเปลี่ยนแปลงใน DT ที่ซ้อนทับได้ ตัวอย่างเช่น หากต้องการแก้ไขชื่อโหนดใน DT หลัก ให้กำหนดป้ายกำกับ "นามแฝง" ที่แมปกับชื่อโหนดดั้งเดิม (เพื่อหลีกเลี่ยงการเปลี่ยนแปลง DT ที่ซ้อนทับ)
- วางซ้อนตำแหน่งร้านค้า DT (เช่น ชื่อพาร์ติชัน รูปแบบร้านค้า)
มั่นใจในความปลอดภัย
Bootloader ต้องแน่ใจว่า DTB/DTBO นั้นปลอดภัย ไม่มีการแก้ไข และไม่เสียหาย คุณสามารถใช้โซลูชันใดก็ได้เพื่อรักษาความปลอดภัย DTB/DTBO เช่น ลายเซ็นรูปภาพสำหรับบูต ใน VBoot 1.0 หรือ ส่วนท้าย AVB HASH (VBoot 2.0)
- หาก DTB/DTBO อยู่ในพาร์ติชั่นเฉพาะ คุณสามารถเพิ่มพาร์ติชั่นนั้นใน trust chain ของ AVB ได้ สายโซ่ความเชื่อถือเริ่มต้นจากรากของความไว้วางใจที่มีการป้องกันด้วยฮาร์ดแวร์ และไปที่บูตโหลดเดอร์ ซึ่งจะตรวจสอบความสมบูรณ์และความถูกต้องของพาร์ติชัน DTB/DTBO
- หาก DTB/DTBO อยู่ในพาร์ติชั่นที่มีอยู่ (เช่น พาร์ติชั่น
odm
) พาร์ติชั่นนั้นควรอยู่ใน trust chain ของ AVB (พาร์ติชัน DTBO สามารถแชร์คีย์สาธารณะกับพาร์ติชันodm
)
สำหรับรายละเอียด โปรดดูที่ Verified Boot