تنسيق مصدر شجرة الأجهزة (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__
. لا يفرض عليك بناء الجملة هذا
ترقيم الأجزاء، ما يتيح لك قراءة DTS المتراكب وكتابته بسهولة. إذا كان
dtc
لا يتيح استخدام هذه البنية النحوية، استخدِم
dtc
في AOSP.
استخدام التصنيفات
للسماح بإشارات غير محدّدة إلى العقد غير المتوفّرة في وقت الترجمة، يجب أن يحتويملف
overlay 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"; }; }; }; |