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

डिवाइस ट्री सोर्स (डीटीएस) फ़ॉर्मैट, डिवाइस ट्री (डीटी) को टेक्स्ट के तौर पर दिखाता है. डिवाइस ट्री कंपाइलर (डीटीसी) इस फ़ॉर्मैट को बाइनरी डीटी में प्रोसेस करता है, जो Linux कर्नेल के ज़रिए अपेक्षित फ़ॉर्म है.

रेफ़रंस का इस्तेमाल करें

डीटीसी (डिवाइस ट्री कंपाइलर + ओवरले पैच) प्रोजेक्ट dtc-format.txt और Manual.txt. डीटीओ के फ़ॉर्मैट और नियमों की जानकारी इसमें दी गई है dt-object-internal.txt शामिल है. ये दस्तावेज़ बताते हैं कि नोड का इस्तेमाल करके मुख्य DT को कैसे अपडेट किया जाए ओवरले DT में fragment@x और सिंटैक्स __overlay__. इसके लिए उदाहरण:

/ {
  fragment@0 {
    target = <&some_node>;
      __overlay__ {
        some_prop = "okay";
        ...
      };
  };
};

हालांकि, Google का सुझाव है कि आप इसका इस्तेमाल करें fragment@x और सिंटैक्स __overlay__ से इंपोर्ट करने के बजाय, रेफ़रंस सिंटैक्स. उदाहरण के लिए:

&some_node {
  some_prop = "okay";
  ...
};

रेफ़रंस सिंटैक्स को dtc के ज़रिए उसी ऑब्जेक्ट में कंपाइल किया जाता है जिसमें __overlay__ सिंटैक्स का इस्तेमाल करके ऊपर बताया गया है. यह सिंटैक्स आपको फ़्रैगमेंट को संख्या में बदल देना चाहिए, ताकि आप ओवरले डीटीएस आसानी से पढ़ और लिख सकें. अगर आपके dtc इस वाक्यात्मक शक्कर का समर्थन नहीं करता है, तो इसका उपयोग करें डीटीसी एओएसपी में उपलब्ध है.

लेबल इस्तेमाल करें

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

/dts-v1/;
/plugin/;

यहां से आप रेफ़रंस का इस्तेमाल करके, ओवरले किए जाने वाले नोड को टारगेट कर सकते हैं, जो कि एंपरसैंड (&) के साथ लगा एक ऐब्सलूट नोड पाथ. उदाहरण के लिए, मुख्य DT में node@0:

मुख्य 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>;
};

बदलें

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

मुख्य.डीटीएस ओवरले.डीटीएस मर्ज किया गया नतीजा
[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 में मौजूद नहीं है, तो यह डीटीओ के बाद जोड़ा गया हो. उदाहरण के लिए:

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