Cú pháp DTO

Định dạng nguồn cây thiết bị (DTS) là bản trình bày bằng văn bản của cây thiết bị (DT). Trình biên dịch cây thiết bị (DTC) xử lý định dạng này thành một DT nhị phân, đây là dạng thức được nhân hệ điều hành Linux dự kiến.

Sử dụng tệp đối chiếu

DTC Dự án (trình biên dịch cây trên thiết bị + bản vá lớp phủ) mô tả định dạng DTS trong dtc-format.txtmanual.txt. Các quy tắc và định dạng của DTO được mô tả trong dt-object-internal.txt. Các tài liệu này mô tả cách cập nhật DT chính bằng cách sử dụng nút fragment@x và cú pháp __overlay__ trong lớp phủ DT. Ví dụ:

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

Tuy nhiên, bạn không nên sử dụng fragment@x và cú pháp __overlay__. Thay vào đó, hãy sử dụng phương thức tham chiếu. Ví dụ:

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

Cú pháp tham chiếu được dtc biên dịch thành cùng một đối tượng với ở trên bằng cú pháp __overlay__. Bạn không cần phải sử dụng cú pháp này đánh số các mảnh, cho phép bạn dễ dàng đọc và ghi DTS lớp phủ. Nếu dtc không hỗ trợ cú pháp dễ hiểu này, hãy sử dụng dtc trong AOSP.

Sử dụng nhãn

Để cho phép các tham chiếu không xác định đến các nút không xuất hiện tại thời điểm biên dịch, phương thức tệp lớp phủ DT .dts phải có thẻ /plugin/ trong . Ví dụ:

/dts-v1/;
/plugin/;

Từ đây, bạn có thể nhắm mục tiêu các nút cần phủ lên bằng cách sử dụng tệp tham chiếu, tức là một đường dẫn nút tuyệt đối có tiền tố là ký hiệu và (&). Ví dụ: đối với node@0 trong DT chính:

Xác định nhãn trong DT chính ... ... sau đó sử dụng các nhã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>;
};

Ghi đè

Nếu thuộc tính đích tham chiếu tồn tại trong DT chính, thuộc tính này sẽ bị ghi đè sau DTO; nếu không thì nó sẽ được nối thêm. Ví dụ:

main.dts lớp phủ.dts Kết quả hợp nhất
[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";
  };
};

Thêm

Nếu tài sản đích của tệp đối chiếu không tồn tại trong DT chính, thì được thêm vào sau DTO. Ví dụ:

main.dts lớp phủ.dts Kết quả hợp nhất
[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";
  };
};

Nút con

Ví dụ về cú pháp nút con:

main.dts lớp phủ.dts Kết quả hợp nhất
[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";
    };
  };
};