डीटीओ सिंटेक्स

डिवाइस ट्री सोर्स (डीटीएस) प्रारूप डिवाइस ट्री का एक पाठ्य प्रतिनिधित्व है। डिवाइस ट्री कंपाइलर (डीटीसी) इस प्रारूप को एक बाइनरी डिवाइस ट्री में संसाधित करता है, जो कि लिनक्स कर्नेल द्वारा अपेक्षित रूप है।

सन्दर्भों का उपयोग करना

DTC (डिवाइस ट्री कंपाइलर + ओवरले पैच) प्रोजेक्ट dtc-format.txt और मैन्युअल.txt में DTS प्रारूप का वर्णन करता है। डीटीओ प्रारूप और नियम 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__ का उपयोग करके उसी ऑब्जेक्ट में संकलित किया जाता है। यह सिंटैक्स आपको अंशों को क्रमांकित करने के लिए बाध्य नहीं करता है, जिससे आप ओवरले डीटीएस को आसानी से पढ़ने और लिखने में सक्षम होते हैं। यदि आपका dtc इस सिंटैक्टिक शुगर का समर्थन नहीं करता है, तो AOSP में dtc का उपयोग करें।

लेबल का उपयोग करना

संकलन समय पर मौजूद नहीं होने वाले नोड्स के अपरिभाषित संदर्भों की अनुमति देने के लिए, ओवरले डीटी .dts फ़ाइल के हेडर में एक टैग /plugin/ होना चाहिए। उदाहरण के लिए:

/dts-v1/;
/plugin/;

यहां से आप एक संदर्भ का उपयोग करके ओवरलेड किए जाने वाले नोड्स को लक्षित कर सकते हैं, जो एक एम्परसेंड (&) के साथ उपसर्गित एक पूर्ण नोड पथ है। उदाहरण के लिए, मुख्य डीटी में node@0 के लिए:

मुख्य डीटी में लेबल परिभाषित करें... ... फिर लेबल का उपयोग करें।
[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>;
};

अधिभावी

यदि संदर्भ लक्ष्य संपत्ति मुख्य डीटी में मौजूद है, तो इसे डीटीओ के बाद ओवरराइड कर दिया जाता है; अन्यथा, यह संलग्न है. उदाहरण के लिए:

मुख्य.डीटीएस ओवरले.डीटीएस मर्ज किया गया परिणाम
[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";
  };
};

जोड़कर

यदि संदर्भ लक्ष्य संपत्ति मुख्य डीटी में मौजूद नहीं है, तो इसे डीटीओ के बाद जोड़ा जाता है। उदाहरण के लिए:

मुख्य.डीटीएस ओवरले.डीटीएस मर्ज किया गया परिणाम
[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";
  };
};

बाल नोड्स

चाइल्ड नोड सिंटैक्स के उदाहरण:

मुख्य.डीटीएस ओवरले.डीटीएस मर्ज किया गया परिणाम
[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";
    };
  };
};