DTO söz dizimi

Cihaz ağacı kaynağı (DTS) biçimi, cihaz ağacının (DT) metin biçimindeki gösterimidir. Cihaz ağacı derleyicisi (DTC), bu biçimi Linux çekirdeği tarafından beklenen biçim olan ikili DT'ye dönüştürür.

Referansları kullanma

DTC (Device Tree Compiler + Overlay Patches) projesi, DTS biçimini dtc-format.txt ve manual.txt dosyalarında açıklar. DTO biçimi ve kuralları dt-object-internal.txt dosyasında açıklanmıştır. Bu belgelerde, yer paylaşımı DT'sinde düğüm fragment@x ve söz dizimi __overlay__ kullanılarak ana DT'nin nasıl güncelleneceği açıklanmaktadır. Örneğin:

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

Ancak Google, fragment@x ve __overlay__ söz dizimini kullanmamanızı, bunun yerine referans söz dizimini kullanmanızı önemle tavsiye eder. Örneğin:

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

Referans söz dizimi, dtc tarafından __overlay__ söz dizimi kullanılarak yukarıdakiyle aynı nesneye derlenir. Bu söz dizimi, parçaları numaralandırmanızı gerektirmez. Böylece, DTS'yi kolayca okuyabilir ve yazabilirsiniz. dtc, bu söz dizimi kolaylığını desteklemiyorsa AOSP'deki dtc'yi kullanın.

Etiketleri kullanma

Derleme sırasında bulunmayan düğümlere tanımlanmamış referanslara izin vermek için, overlay DT .dts dosyasının üstbilgisinde /plugin/ etiketi bulunmalıdır. Örneğin:

/dts-v1/;
/plugin/;

Buradan, bir referans kullanarak yerleştirilecek düğümleri hedefleyebilirsiniz. Bu referans, "ve" işareti (&) ile öneklenmiş mutlak bir düğüm yoludur. Örneğin, ana DT'deki node@0 için:

Ana DT'de etiketleri tanımlayın. ... ardından etiketleri kullanın.
[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>;
};

Geçersiz kıl

Referans hedef mülk ana DT'de varsa DTO'dan sonra geçersiz kılınır, aksi takdirde eklenir. Örneğin:

main.dts overlay.dts Birleştirilmiş sonuç
[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";
  };
};

Ekle

Referans hedef mülk ana DT'de yoksa DTO'nun sonuna eklenir. Örneğin:

main.dts overlay.dts Birleştirilmiş sonuç
[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";
  };
};

Alt düğümler

Alt düğüm söz dizimi örnekleri:

main.dts overlay.dts Birleştirilmiş sonuç
[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";
    };
  };
};