Định dạng nguồn cây thiết bị (DTS) là một 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 DT nhị phân, đây là dạng mà hạt 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ị + các 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 fragment@x
nút và cú pháp __overlay__
trong DT lớp phủ. 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__
, 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 thành cùng một đối tượng như ở trên bằng cú pháp __overlay__
. Cú pháp này không bắt buộc bạn phải đánh số các đoạn, cho phép bạn dễ dàng đọc và ghi DTS lớp phủ. 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 chưa xác định đến các nút không có trong thời gian biên dịch, tệp DT .dts
lớp phủ phải có thẻ /plugin/
trong tiêu đề. Ví dụ:
/dts-v1/; /plugin/;
Từ đây, bạn có thể nhắm đến các nút cần được phủ bằng cách sử dụng một giá trị tham chiếu. Giá trị này 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 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, thì thuộc tính đó sẽ bị ghi đè sau DTO; nếu không, thuộc tính đó sẽ được thêm vào. Ví dụ:
main.dts | overlay.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 thuộc tính đích tham chiếu không tồn tại trong DT chính, thì thuộc tính đó sẽ được thêm vào sau DTO. Ví dụ:
main.dts | overlay.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 | overlay.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"; }; }; }; |