Cú pháp DTO

Định dạng Nguồn cây thiết bị (DTS) là biểu diễn văn bản của cây thiết bị. Trình biên dịch cây thiết bị (DTC) xử lý định dạng này thành cây thiết bị nhị phân, đây là dạng mà nhân Linux mong đợi.

Sử dụng tài liệu tham khảo

Dự án DTC (Trình biên dịch cây thiết bị + bản vá lớp phủ) mô tả định dạng DTS trong dtc-format.txtmanual.txt . Định dạng và quy tắc 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, Google thực sự khuyên bạn không nên sử dụng fragment@x và cú pháp __overlay__ mà thay vào đó hãy sử dụng cú pháp tham chiếu. Ví dụ:

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

Cú pháp tham chiếu được dtc biên dịch vào cùng một đối tượng như trên bằng cú pháp __overlay__ . Cú pháp này không buộc bạn phải đánh số các đoạn, cho phép bạn đọc và ghi lớp phủ DTS một cách dễ dàng. Nếu dtc của bạn không hỗ trợ cú pháp 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, tệp DT .dts lớp phủ phải có thẻ /plugin/ trong tiêu đề của nó. Ví dụ:

/dts-v1/;
/plugin/;

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

Xác định nhãn trong DT chính ... ... sau đó sử dụng 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 mục tiêu tham chiếu tồn tại trong DT chính, nó sẽ bị ghi đè sau DTO; nếu không, nó sẽ được thêm vào. Ví dụ:

main.dts lớp phủ.dts Kết quả được 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";
  };
};

Đang bổ sung

Nếu thuộc tính mục tiêu tham chiếu không tồn tại trong DT chính, nó sẽ được thêm vào sau DTO. Ví dụ:

main.dts lớp phủ.dts Kết quả được 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";
  };
};

Các nút con

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

main.dts lớp phủ.dts Kết quả được 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";
    };
  };
};