DTO Sözdizimi

Aygıt Ağacı Kaynağı (DTS) biçimi, bir aygıt ağacının metinsel bir temsilidir. Aygıt Ağacı Derleyicisi (DTC), bu biçimi, Linux çekirdeği tarafından beklenen biçim olan ikili aygıt ağacında işler.

Referansları kullanma

DTC (Aygıt Ağacı derleyicisi + kaplama yamaları) projesi, DTS formatını dtc-format.txt ve manual.txt olarak açıklar . DTO formatı ve kuralları dt-object-internal.txt dosyasında açıklanmıştır. Bu belgeler, overlay DT'de düğüm fragment@x ve sözdizimi __overlay__ kullanılarak ana DT'nin nasıl güncelleneceğini açıklar. Örneğin:

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

Ancak Google şiddetle kullanmayan önerir fragment@x ve sözdizimi __overlay__ referans sözdizimini kullanın yerine, vb. Örneğin:

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

Referans sözdizimi, __overlay__ sözdizimi kullanılarak yukarıdaki ile aynı nesnede dtc tarafından __overlay__ . Bu sözdizimi sizi parçaları numaralandırmaya zorlamaz, böylece üst üste DTS'yi kolayca okuyup yazmanıza olanak tanır. dtc bu sözdizimsel şekeri desteklemiyorsa, AOSP'de dtc'yi kullanın.

Etiketleri kullanma

Derleme zamanında mevcut olmayan düğümlere tanımsız referanslara izin vermek için, overlay DT .dts dosyasının başlığında bir etiketi /plugin/ olması gerekir. Örneğin:

/dts-v1/;
/plugin/;

Buradan, bir ampersan (&) ile başlayan mutlak bir düğüm yolu olan bir referans kullanarak üst üste binecek düğümleri hedefleyebilirsiniz. Örneğin, ana node@0 için:

Ana DT'de etiketleri tanımlayın ... ... sonra 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ılma

Referans hedef özelliği ana DT'de mevcutsa, 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";
  };
};

Ekleniyor

Referans hedef özelliği 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özdizimi ö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";
    };
  };
};