DTO Sözdizimi

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

referansları kullanma

DTC (Aygıt Ağacı derleyici + kaplama yamaları) projesi, DTS biçimini 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, bindirmeli DT'de düğüm fragment@x ve __overlay__ sözdizimi 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, fragment@x ve sözdizimini __overlay__ kullanmamanızı ve bunun yerine başvuru sözdizimini kullanmanızı şiddetle tavsiye eder. Örneğin:

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

Başvuru sözdizimi, dtc tarafından, __overlay__ sözdizimi kullanılarak yukarıdakiyle aynı nesneye derlenir. Bu sözdizimi sizi parçaları numaralandırmaya zorlamaz, DTS'yi kolayca okumanızı ve yazmanızı sağlar. dtc bu sözdizimsel şekeri desteklemiyorsa, AOSP'de dtc'yi kullanın.

Etiketleri kullanma

Derleme zamanında mevcut olmayan düğümlere tanımsız başvurulara izin vermek için, bindirme DT .dts dosyasının başlığında /plugin/ etiketi olmalıdır. Örneğin:

/dts-v1/;
/plugin/;

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

Etiketleri ana CE'de 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 halde 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";
  };
};

ekleme

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