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

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

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

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

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

कंपाइलेशन के समय मौजूद नहीं होने वाले नोड के लिए, अनडिफ़ाइंड रेफ़रंस की अनुमति देने के लिए, ओवरले डीटी .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>;
};

बदलें

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

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";
    };
  };
};