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

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

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

DTC (डिवाइस ट्री कंपाइलर + ओवरले पैच) प्रोजेक्ट, dtc-format.txt और manual.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 का इस्तेमाल करें.

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

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

बदलें

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

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