รูปแบบแหล่งที่มาของแผนผังอุปกรณ์ (DTS) คือการแสดงข้อความของแผนผังอุปกรณ์ (DT) แบบข้อความ คอมไพเลอร์แผนผังอุปกรณ์ (DTC) จะประมวลผลรูปแบบนี้ใน DT แบบไบนารี ซึ่งเป็นรูปแบบที่เคอร์เนลของ Linux คาดหวัง
ใช้ข้อมูลอ้างอิง
DTC
โปรเจ็กต์ (คอมไพเลอร์แผนผังอุปกรณ์ + แพตช์การวางซ้อน) อธิบายรูปแบบ 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__
ไม่ได้บังคับให้คุณใช้
กำหนดหมายเลข Fragment ซึ่งจะช่วยให้คุณอ่านและเขียน 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 | การซ้อนทับ.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 | การซ้อนทับ.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 | การซ้อนทับ.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"; }; }; }; |