تنسيق مصدر شجرة الجهاز (DTS) هو تمثيل نصي لشجرة الجهاز. يعالج برنامج Device Tree Compiler (DTC) هذا التنسيق في شجرة جهاز ثنائية ، وهو النموذج المتوقع بواسطة Linux kernel.
باستخدام المراجع
يصف مشروع 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__
. لا يجبرك بناء الجملة هذا على ترقيم الأجزاء ، مما يتيح لك قراءة وكتابة 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"; }; }; }; |