تنسيق مصدر شجرة الأجهزة (DTS) هو تمثيل نصي لشجرة الأجهزة (DT). يعالج برنامج ترجمة شجرة الأجهزة (DTC) هذا التنسيق إلى شجرة أجهزة ثنائية، وهو الشكل الذي تتوقّعه نواة Linux.
استخدام المراجع
يوضّح مشروع DTC
(برنامج تجميع شجرة الأجهزة + تصحيحات التراكب) تنسيق DTS في
dtc-format.txt
وmanual.txt.
يتم وصف تنسيق DTO وقواعده في الملف
dt-object-internal.txt.
توضّح هذه المستندات كيفية تعديل جدول بيانات رئيسي باستخدام العقدة fragment@x
والبنية __overlay__
في جدول بيانات متراكب. على سبيل المثال:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
ومع ذلك، تنصحك Google بشدة بعدم استخدام
fragment@x
وبنية __overlay__
، واستخدام بنية المرجع بدلاً من ذلك. مثلاً:
&some_node { some_prop = "okay"; ... };
يتم تجميع بنية المرجع بواسطة dtc
في الكائن نفسه كما هو موضح أعلاه باستخدام البنية __overlay__
. لا يفرض بناء الجملة هذا عليك ترقيم الأجزاء، ما يتيح لك قراءة وكتابة DTS المتراكبة بسهولة. إذا كان
dtc
لا يتيح هذه الميزة، استخدِم
dtc
في AOSP.
استخدام التصنيفات
للسماح بالإشارات غير المحدّدة إلى العُقد غير المتوفّرة في وقت التجميع، يجب أن يحتوي ملف .dts
overlay DT على علامة /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"; }; }; |
إلحاق
إذا لم تكن سمة العنصر المستهدَف المرجعي متوفّرة في جدول البيانات الرئيسي، تتم إضافتها بعد 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"; }; }; }; |