การดำเนินการ DTO, การดำเนินการ DTO, การดำเนินการ DTO

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

การแบ่ง DT

เริ่มต้นด้วยการแบ่งแผนผังอุปกรณ์ออกเป็นสอง (2) ส่วน:

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

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

การสร้าง DT หลักและโอเวอร์เลย์

ในการสร้าง DT หลัก:

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

วิธีสร้างโอเวอร์เลย์ DT:

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

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

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

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

ตัวอย่างสถานที่สำหรับ DT หลัก:

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

ตำแหน่งตัวอย่างสำหรับโอเวอร์เลย์ DT:

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

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

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

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

ทำงานใน bootloader

วิ่ง:

รูปที่ 5 การใช้งานรันไทม์ทั่วไปสำหรับการซ้อนทับแผนผังอุปกรณ์ใน bootloader
  1. โหลด .dtb จากที่เก็บข้อมูลลงในหน่วยความจำ
  2. โหลด .dtbo จากที่เก็บข้อมูลลงในหน่วยความจำ
  3. ซ้อนทับ .dtb ด้วย .dtbo เพื่อเป็น DT ที่ผสานกัน
  4. เริ่มเคอร์เนลโดยระบุที่อยู่หน่วยความจำของ 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