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özdizimi __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 okuyup yazabilirsiniz. dtc bu söz dizimi kolaylığını desteklemiyorsa AOSP'deki dtc in AOSP'yi kullanın.

Etiketleri kullanma

Derleme sırasında bulunmayan düğümlere belirsiz referanslara izin vermek için, overlay DT .dts dosyasının başlığında /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";
  };
};

İliştir

Referans hedef mülk ana DT'de yoksa DTO'dan sonra 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";
    };
  };
};