DTO Sözdizimi

Cihaz Ağacı Kaynağı (DTS) formatı, bir cihaz ağacının metinsel temsilidir. Aygıt Ağacı Derleyicisi (DTC), bu biçimi, Linux çekirdeğinin beklediği biçim olan ikili aygıt ağacına işler.

Referansları kullanma

DTC (Aygıt Ağacı derleyicisi + yer paylaşımı yamaları) projesi, DTS formatını dtc-format.txt ve manual.txt biçiminde açıklar. DTO formatı ve kuralları dt-object-internal.txt dosyasında açıklanmıştır. Bu belgeler, bindirme CE'sinde fragment@x düğümü ve __overlay__ sözdizimini kullanarak ana CE'nin nasıl güncelleneceğini açıklar. Örneğin:

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

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

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

Referans sözdizimi, dtc tarafından __overlay__ sözdizimi kullanılarak yukarıdakiyle aynı nesneye derlenir. Bu sözdizimi sizi parçaları numaralandırmaya zorlamaz ve kaplama DTS'yi kolayca okumanıza ve yazmanıza olanak tanır. Eğer dtc bu sözdizimsel şekeri desteklemiyorsa, AOSP'deki dtc'yi kullanın.

Etiketleri kullanma

Derleme zamanında mevcut olmayan düğümlere yönelik tanımsız referanslara izin vermek için, kaplama DT .dts dosyasının başlığında /plugin/ etiketi bulunmalıdır. Örneğin:

/dts-v1/;
/plugin/;

Buradan, bir ve işareti (&) ile öneki mutlak bir düğüm yolu olan bir referansı kullanarak üst üste bindirilecek düğümleri hedefleyebilirsiniz. Örneğin ana CE'deki node@0 için:

Ana CE'deki 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 CE'de mevcutsa, DTO'dan sonra geçersiz kılınır; aksi takdirde eklenir. Örneğin:

ana.dts kaplama.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 CE'de mevcut değilse DTO'dan sonra eklenir. Örneğin:

ana.dts kaplama.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:

ana.dts kaplama.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";
    };
  };
};