คุณสามารถใช้ Device Tree Compiler (DTC) เพื่อคอมไพล์ไฟล์ Device Tree Source อย่างไรก็ตาม ก่อนที่จะใช้ 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
/include/
เพื่อจำลอง DTO บนโฮสต์- สร้างสำเนาของโอเวอร์เลย์
.dts
ในการคัดลอก ให้ลบส่วนหัวบรรทัดแรกออก ตัวอย่าง:/dts-v1/; /plugin/;
บันทึกไฟล์เป็นmy_overlay_dt_wo_header.dts
(หรือชื่อไฟล์ใดก็ได้ที่คุณต้องการ) - สร้างสำเนาของไฟล์
.dts
หลัก ในการคัดลอก หลังจากบรรทัดสุดท้าย ให้เพิ่มไวยากรณ์รวมสำหรับไฟล์ที่คุณสร้างในขั้นตอนที่ 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 ต้องใช้พาร์ติชัน Device Tree Blob Overlay (DTBO) หากต้องการเพิ่มโหนดหรือเปลี่ยนแปลงคุณสมบัติใน SoC DT บูตโหลดเดอร์จะต้องซ้อนทับ DT เฉพาะอุปกรณ์แบบไดนามิกบน SoC DT
บ่งชี้ถึงการซ้อนทับที่ใช้
หากต้องการเปิดใช้งาน Vendor Test Suite (VTS) เพื่อประเมินความถูกต้องของแอปพลิเคชันโอเวอร์เลย์ ผู้จำหน่ายจะต้องเพิ่มพารามิเตอร์บรรทัดคำสั่งเคอร์เนลใหม่ androidboot.dtbo_idx
ที่ระบุโอเวอร์เลย์ที่เลือกจากพาร์ติชัน DTBO ใน Android 12 ที่ใช้เคอร์เนลเวอร์ชัน 5.10 ขึ้นไป พารามิเตอร์นี้จะผ่าน bootconfig ตัวอย่างเช่น พารามิเตอร์ androidboot.dtbo_idx=x,y,z
รายงาน x
, y
และ z
เป็นดัชนีฐานศูนย์ของ Device Tree Overlays (DTO) จากพาร์ติชัน DTBO ที่ใช้ (ตามลำดับนั้น) โดย bootloader กับฐาน แผนผังอุปกรณ์ (DT)
การซ้อนทับสามารถใช้กับโหนดจากแผนผังอุปกรณ์หลักหรือเพิ่มโหนดใหม่ได้ แต่ ไม่สามารถ อ้างถึงโหนดที่เพิ่มในการซ้อนทับก่อนหน้าได้ ข้อจำกัดนี้จำเป็นเนื่องจากแอปพลิเคชันโอเวอร์เลย์ไม่รวมตารางสัญลักษณ์โอเวอร์เลย์กับตารางสัญลักษณ์ DT หลัก (การไม่รวมเข้าด้วยกันจะหลีกเลี่ยงความขัดแย้งในชื่อสัญลักษณ์และความยุ่งยากของการขึ้นต่อกันระหว่างโอเวอร์เลย์)
ตัวอย่าง: การวางซ้อนไม่ถูกต้อง
ในตัวอย่างนี้ overlay_2.dts
อ้างถึงโหนด e
ซึ่งถูกเพิ่มโดย overlay_1.dts
หลังจากใช้ overlay_1
กับ DT หลักแล้ว หากมีการพยายามใช้ overlay_2
กับ DT ที่เป็นผลลัพธ์ การประยุกต์การซ้อนทับจะล้มเหลวโดยมีข้อผิดพลาดว่าไม่มีสัญลักษณ์ e
ในตารางสัญลักษณ์สำหรับ DT ฐาน
main.dts | overlay_1.dts | overlay_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 | overlay_1.dts | overlay_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
ต่อท้ายบรรทัดคำสั่งเคอร์เนล- พารามิเตอร์จะต้องระบุ ดัชนีฐานศูนย์ของ DTO จากอิมเมจพาร์ติชัน DTBO ที่นำไปใช้กับ DT ฐาน (ในลำดับเดียวกัน)
- ดัชนีจะต้องอ้างอิงถึงตำแหน่งของโอเวอร์เลย์ในพาร์ติชั่น DTBO
สำหรับรายละเอียดเกี่ยวกับโครงสร้างของพาร์ติชั่น DTBO โปรดดู Device Tree Overlays บน source.android.com
กำลังตรวจสอบพาร์ติชัน DTBO
คุณสามารถใช้ VTS เพื่อตรวจสอบสิ่งต่อไปนี้:
- การมีอยู่ของพารามิเตอร์บรรทัดคำสั่งเคอร์เนล
androidboot.dtbo_idx
(โดยการตรวจสอบว่าInit
ได้ตั้งค่าคุณสมบัติระบบro.boot.dtbo_idx
ที่เกี่ยวข้องโดยอัตโนมัติ) - ความถูกต้องของคุณสมบัติระบบ
ro.boot.dtbo_idx
(โดยการตรวจสอบว่าคุณสมบัติระบุดัชนีอิมเมจ DTBO ที่ถูกต้องอย่างน้อยหนึ่งดัชนี) - ความถูกต้องของพาร์ติชัน 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>; }; |
ดีทีรอบสุดท้าย |
---|
/dts-v1/; / { a { phandle = <0x1>; }; b { phandle = <0x2>; }; c { phandle = <0x3>; prop = <0xfe>; }; __symbols__ { a = "/a"; b = "/b"; c = "/c"; }; }; |
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2024-04-29 UTC