Đị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.txt và manual.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"; }; }; }; |