รูปแบบ Device Tree Source (DTS) เป็นการแสดงข้อความของแผนผังอุปกรณ์ Device Tree Compiler (DTC) ประมวลผลรูปแบบนี้เป็นแผนผังอุปกรณ์ไบนารี ซึ่งเป็นรูปแบบที่เคอร์เนล Linux คาดหวัง
การใช้ข้อมูลอ้างอิง
โครงการ DTC (คอมไพเลอร์ Device Tree + แพตช์ซ้อนทับ) อธิบายรูปแบบ DTS ใน dtc-format.txt และ manual.txt รูปแบบและกฎของ DTO มีการอธิบายไว้ใน dt-object-internal.txt เอกสารเหล่านี้อธิบายวิธีอัปเดต DT หลักโดยใช้โหนด fragment@x
และไวยากรณ์ __overlay__
ในโอเวอร์เลย์ DT ตัวอย่างเช่น:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
อย่างไรก็ตาม Google ขอแนะนำอย่างยิ่งให้คุณ อย่า ใช้ fragment@x
และไวยากรณ์ __overlay__
และใช้ไวยากรณ์อ้างอิงแทน ตัวอย่างเช่น:
&some_node { some_prop = "okay"; ... };
ไวยากรณ์อ้างอิงถูกคอมไพล์โดย dtc
ลงในออบเจ็กต์เดียวกันกับข้างต้นโดยใช้ไวยากรณ์ __overlay__
ไวยากรณ์นี้ไม่บังคับให้คุณกำหนดหมายเลขแฟรกเมนต์ ทำให้คุณสามารถอ่านและเขียน DTS ที่ซ้อนทับได้อย่างง่ายดาย หาก dtc
ของคุณไม่รองรับน้ำตาลวากยสัมพันธ์นี้ ให้ใช้ dtc ใน AOSP
การใช้ป้ายกำกับ
หากต้องการอนุญาตการอ้างอิงที่ไม่ได้กำหนดไปยังโหนดที่ไม่มีอยู่ในเวลาคอมไพล์ ไฟล์ DT .dts
แบบโอเวอร์เลย์จะต้องมีแท็ก /plugin/
ในส่วนหัว ตัวอย่างเช่น:
/dts-v1/; /plugin/;
จากที่นี่ คุณสามารถกำหนดเป้าหมายโหนดที่จะซ้อนทับโดยใช้การอ้างอิง ซึ่งเป็นเส้นทางโหนดสัมบูรณ์ที่นำหน้าด้วยเครื่องหมายแอมเพอร์แซนด์ (&) ตัวอย่างเช่น สำหรับ node@0
ใน DT หลัก:
กำหนดฉลากใน DT หลัก ... | ... จากนั้นใช้ป้ายกำกับ |
---|---|
[my_main_dt.dts] /dts-v1/; / { my_node: node@0 { status = "disabled"; my_child: child@0 { value = <0xffffffff>; }; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { status = "okay"; }; &my_child { value = <0x1>; }; |
การเอาชนะ
หากคุณสมบัติเป้าหมายอ้างอิงมีอยู่ใน DT หลัก คุณสมบัตินั้นจะถูกแทนที่หลังจาก DTO มิฉะนั้นจะถูกผนวกเข้าไป ตัวอย่างเช่น:
main.dts | overlay.dts | ผลรวม |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_node: node@0 { status = "disabled"; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { status = "okay"; }; | /dts-v1/; / { compatible = "corp,foo"; ... node@0 { linux,phandle = <0x1>; phandle = <0x1>; status = "okay"; }; }; |
ต่อท้าย
หากไม่มีคุณสมบัติเป้าหมายอ้างอิงใน DT หลัก คุณสมบัตินั้นจะถูกผนวกหลัง DTO ตัวอย่างเช่น:
main.dts | overlay.dts | ผลรวม |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_node: node@0 { status = "okay"; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_node { new_prop = "bar"; }; | /dts-v1/; / { compatible = "corp,foo"; ... node@0 { linux,phandle = <0x1>; phandle = <0x1>; status = "okay"; new_prop = "bar"; }; }; |
โหนดย่อย
ตัวอย่างของไวยากรณ์โหนดลูก:
main.dts | overlay.dts | ผลรวม |
---|---|---|
[my_main_dt.dts] /dts-v1/; / { compatible = "corp,foo"; my_nodes: nodes { compatible = "corp,bar"; node@0 { status = "disabled"; }; }; }; | [my_overlay_dt.dts] /dts-v1/; /plugin/; &my_nodes { new_prop1 = "abc"; node@0 { status = "okay"; new_prop2 = "xyz"; }; }; | /dts-v1/; / { compatible = "corp,foo"; ... nodes { linux,phandle = <0x1>; phandle = <0x1>; compatible = "corp,bar"; new_prop1 = "abc"; node@0 { linux,phandle = <0x2>; phandle = <0x2>; status = "okay"; new_prop2 = "xyz"; }; }; }; |