DTO söz dizimi

Cihaz ağacı kaynağı (DTS) biçimi, cihaz ağacının (DT) metinsel bir temsilidir. 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 (cihaz ağacı derleyicisi + yer paylaşımı yamaları) projesinde, DTS biçimi dtc-format.txt ve manual.txt dosyalarında açıklanmaktadır. DTO biçimi ve kuralları dt-object-internal.txt dosyasında açıklanmaktadır. Bu dokümanlarda, yer paylaşımı DT'sinde fragment@x düğümü ve __overlay__ söz dizimi 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. Örnek:

&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ıza gerek bırakmaz. Böylece, yer paylaşımlı DTS'leri kolayca okuyabilir ve yazabilirsiniz. dtc'ünüz bu söz dizimi kısaltmasını desteklemiyorsa AOSP'deki dtc'yi kullanın.

Etiketleri kullanma

Derleme sırasında mevcut olmayan düğümlere yönelik tanımlanmamış referanslara izin vermek için yer paylaşımı DT .dts dosyasının başlığında bir /plugin/ etiketi bulunmalıdır. Örnek:

/dts-v1/;
/plugin/;

Buradan, "ve" işareti (&) ile başlayan mutlak bir düğüm yolu olan bir referans kullanarak yer paylaşımı yapılacak düğümleri hedefleyebilirsiniz. Örneğin, ana DT'deki node@0 için:

Ana DT'de etiketleri tanımlama ... ... 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 mevcutsa DTO'dan sonra geçersiz kılınır. Aksi takdirde eklenir. Örnek:

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 mevcut değilse DTO'dan sonra eklenir. Örnek:

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";
    };
  };
};