คุณสามารถใช้คอมไพเลอร์แผนผังอุปกรณ์ (DTC) เพื่อคอมไพเลอร์แหล่งที่มาของแผนผังอุปกรณ์ (DTS) อย่างไรก็ตาม ก่อนที่จะใช้แผนผังอุปกรณ์ซ้อนทับ (DT) กับ DT หลักเป้าหมาย คุณจะ ควรตรวจสอบผลลัพธ์ด้วยการจำลองลักษณะการทำงานของแผนผังแผนผังอุปกรณ์ (DTO)
คอมไพล์ด้วย DTC
เมื่อใช้ dtc
คอมไพล์ .dts
คุณต้องเพิ่ม
ตัวเลือก -@
เพื่อเพิ่มโหนด __symbols__
ใน
ผลลัพธ์คือ .dtbo
โหนด __symbols__
มี
รายการโหนดทั้งหมดที่มีป้ายกำกับ ซึ่งไลบรารี DTO ใช้ได้
สำหรับการอ้างอิง
ตัวอย่างคำสั่งสำหรับสร้าง DT หลัก .dts
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
ตัวอย่างคำสั่งสำหรับสร้างโอเวอร์เลย์ DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
ยืนยันผล DTO ในโฮสต์
การยืนยันจะช่วยคุณระบุข้อผิดพลาดที่อาจเกิดขึ้นเมื่อวาง
DT ที่วางซ้อนบน DT หลัก ก่อนที่จะอัปเดตเป้าหมาย คุณสามารถตรวจสอบ
ผลของการซ้อนทับ DT บนโฮสต์โดยการจำลองพฤติกรรมของ DTO โดยใช้
/include/
ใน .dts
รูปที่ 1 ใช้ไวยากรณ์ /include/ เพื่อจำลอง DTO บนโฮสต์
- สร้างสำเนาของการวางซ้อน
.dts
ในสำเนา ให้นำส่วน ของบรรทัดแรก ตัวอย่าง/dts-v1/; /plugin/;
บันทึกไฟล์เป็นmy_overlay_dt_wo_header.dts
(หรือค่าใดก็ได้ ชื่อไฟล์ที่ต้องการ) - สร้างสำเนาของ
.dts
หลัก ในสำเนา หลังส่วน บรรทัดสุดท้าย ให้ใส่ไวยากรณ์ include สำหรับไฟล์ที่คุณสร้างในขั้นตอนที่ 1 ต่อท้าย ดังตัวอย่างต่อไปนี้/include/ "my_overlay_dt_wo_header.dts"
บันทึกไฟล์เป็นmy_main_dt_with_include.dts
(หรือค่าใดก็ได้ ชื่อไฟล์ที่ต้องการ) - ใช้
dtc
เพื่อคอมไพล์my_main_dt_with_include.dts
เพื่อให้ได้ DT ที่ผสานรวม ซึ่ง เป็นผลลัพธ์เดียวกันกับ DTO ดังตัวอย่างต่อไปนี้dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- ใช้
dtc
เพื่อถ่ายโอนข้อมูลmy_merged_dt.dto
dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
ยืนยัน DTO ใน Android 9
Android 9 ต้องใช้การวางซ้อน BLOB ของแผนผังอุปกรณ์ (DTBO) พาร์ติชัน วิธีเพิ่มโหนดหรือเปลี่ยนแปลงพร็อพเพอร์ตี้ใน SoC DT ตัว Bootloader จะต้องวางซ้อน DT เฉพาะอุปกรณ์แบบไดนามิก SoC DT
ระบุการวางซ้อนที่ใช้
หากต้องการเปิดใช้งาน
Vendor Test Suite (VTS) เพื่อประเมินความถูกต้องของการวางซ้อน
จะต้องเพิ่มพารามิเตอร์บรรทัดคำสั่งของเคอร์เนลใหม่
androidboot.dtbo_idx
ที่ระบุการวางซ้อนที่เลือกจาก
พาร์ติชัน DTBO ใน Android 12 ที่ใช้เวอร์ชันเคอร์เนล
พารามิเตอร์นี้ผ่าน Bootconfig 5.10 ขึ้นไป
เช่น พารามิเตอร์ androidboot.dtbo_idx=x,y,z
รายงาน
x
, y
และ z
เป็นดัชนีฐาน 0 ของ
DTO จากพาร์ติชัน DTBO นำไปใช้ (ตามลำดับ)
โดย Bootloader ไปยัง DT พื้นฐาน
การวางซ้อนสามารถใช้กับโหนดจาก DT หลัก หรือเพิ่มโหนดใหม่ แต่ไม่สามารถอ้างถึงโหนดที่เพิ่มในการวางซ้อนก่อนหน้า ช่วงเวลานี้ เป็นสิ่งจำเป็นเนื่องจากแอปซ้อนทับไม่ได้ผสาน ตารางสัญลักษณ์ซ้อนทับกับตารางสัญลักษณ์ DT หลัก (ไม่รวม หลีกเลี่ยงการรวม ความขัดแย้งในชื่อสัญลักษณ์และข้อมูลแทรกของทรัพยากร Dependency ระหว่าง การวางซ้อน)
ตัวอย่าง: การวางซ้อนที่ไม่ถูกต้อง
ในตัวอย่างนี้ overlay_2.dts
หมายถึงโหนด
e
ซึ่งเพิ่มโดย
overlay_1.dts
หลังจากใช้ overlay_1
กับ
DT หลัก หากมีการพยายามใช้ overlay_2
กับ
DT ผลลัพธ์ แอปซ้อนทับทำงานไม่สำเร็จโดยมีข้อผิดพลาดที่สัญลักษณ์
ไม่มี e
ในตารางสัญลักษณ์ของ
DT พื้นฐาน
Main.dts | การซ้อนทับ_1.dts | การซ้อนทับ_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
ตัวอย่าง: การวางซ้อนที่ถูกต้อง
ในตัวอย่างนี้ overlay_2.dts
จะหมายถึงโหนดเท่านั้น
b
จาก DTS หลัก วันและเวลา
overlay_1
จะใช้กับ DT พื้นฐาน ตามด้วย
แอปของ overlay_2
มูลค่าของพร็อพเพอร์ตี้
prop
ในโหนด e
(ตั้งค่าโดย overlay_1.dts
) ถูกเขียนทับด้วยค่าที่กำหนดโดย
overlay_2.dts
Main.dts | การซ้อนทับ_1.dts | การซ้อนทับ_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
ติดตั้งใช้งานพาร์ติชัน DTBO
หากต้องการใช้พาร์ติชัน DTBO ที่จำเป็น ให้ตรวจสอบว่า Bootloader สามารถดำเนินการ ดังต่อไปนี้:
- ระบุบอร์ดที่สมาชิกใช้อยู่และเลือกบอร์ดที่เหมาะสม โฆษณาซ้อนทับที่จะใช้
- เพิ่มพารามิเตอร์
androidboot.dtbo_idx
ต่อท้ายเคอร์เนล บรรทัดคำสั่ง- พารามิเตอร์ต้องระบุดัชนีฐาน 0 ของ DTO จากอิมเมจพาร์ติชัน DTBO ที่ใช้กับ DT พื้นฐาน (ใน คำสั่งซื้อ)
- ดัชนีต้องอ้างอิงตำแหน่งของการวางซ้อนใน DTBO พาร์ติชัน
โปรดดูรายละเอียดเกี่ยวกับโครงสร้างของพาร์ติชัน DTBO ที่การวางซ้อนแผนผังอุปกรณ์
ตรวจสอบพาร์ติชัน DTBO
คุณใช้ VTS เพื่อยืนยันสิ่งต่อไปนี้ได้
- การมีอยู่ของพารามิเตอร์บรรทัดคำสั่งเคอร์เนล
androidboot.dtbo_idx
(โดยการตรวจสอบว่าInit
มี ตั้งค่าระบบro.boot.dtbo_idx
ที่เกี่ยวข้องโดยอัตโนมัติ ) - อายุการใช้งานของพร็อพเพอร์ตี้ระบบ
ro.boot.dtbo_idx
(โดย ตรวจสอบว่าพร็อพเพอร์ตี้ระบุอิมเมจ DTBO ที่ถูกต้องอย่างน้อย 1 รายการ ดัชนี) - อายุการใช้งานของพาร์ติชัน DTBO (ตรวจสอบการวางซ้อนใน DTBO ด้วย พาร์ติชันที่ใช้กับ DT ฐาน)
- แสดงโหนดเพิ่มเติมหรือการเปลี่ยนแปลงพร็อพเพอร์ตี้ใน DT ที่ได้ ไปยังเคอร์เนลของ Linux
ตัวอย่างเช่น ในการวางซ้อนและ DT สุดท้ายต่อไปนี้ การเพิ่ม
androidboot.dtbo_idx=5,3
ไปยังบรรทัดคำสั่งของเคอร์เนล
การตรวจสอบความถูกต้อง แต่เพิ่ม androidboot.dtbo_idx=3,5
ลงในเคอร์เนล
ไม่ผ่านการตรวจสอบ
DT ซ้อนทับที่ดัชนี 3 | DT ซ้อนทับที่ดัชนี 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; |
[overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
ผลคะแนนสุดท้าย DT |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |