기기 트리 소스(DTS) 형식에는 기기 트리가 텍스트 형식으로 표현되어 있습니다. 기기 트리 컴파일러(DTC)는 이러한 형식을 Linux 커널에서 기대하는 형식인 바이너리 기기 트리로 처리합니다.
참조 사용
DTC(기기 트리 컴파일러 + 오버레이 패치) 프로젝트는 dtc-format.txt 및 manual.txt에서 DTS 형식을 설명합니다.
DTO 형식과 규칙은 dt-object-internal.txt에 설명되어 있습니다.
이러한 문서에서는 오버레이 DT에서 노드 fragment@x
및 구문 __overlay__
를 사용하여 기본 DT를 업데이트하는 방법을 설명합니다. 예:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
그러나 fragment@x
및 구문 __overlay__
를 사용하지 않는 것이 좋습니다. 대신 참조 구문을 사용하세요. 예:
&some_node { some_prop = "okay"; ... };
참조 문법은 문법 __overlay__
를 사용하여 위와 동일한 객체로 dtc
에서 컴파일됩니다. 이 구문은 프래그먼트에 번호를 지정하도록 강제하지 않으므로 오버레이 DTS를 쉽게 읽고 쓸 수 있습니다. dtc
에서 이 구문 코드를 지원하지 않으면 AOSP의 DTC를 사용하세요.
라벨 사용
컴파일 시간에 표시되지 않는 노드의 정의되지 않은 참조를 허용하려면 오버레이 DT .dts
파일의 헤더에 /plugin/
태그가 있어야 합니다. 예:
/dts-v1/; /plugin/;
여기에서 앰퍼샌드(&)가 접두사로 지정된 절대 노드 경로인 참조를 사용하여 오버레이될 노드를 타겟팅할 수 있습니다. 예를 들어 기본 DT의 node@0
의 경우 다음과 같습니다.
기본 DT에서 라벨을 정의 ... | ... 한 다음 라벨을 사용합니다. |
---|---|
[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>; }; |
재정의
참조 대상 속성이 기본 DT에 존재하는 경우 DTO 이후에 재정의됩니다. 재정의되지 않은 경우에는 추가됩니다. 예:
main.dts | overlay.dts | 병합된 결과 |
---|---|---|
[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"; }; }; |
추가
참조 대상 속성이 기본 DT에 존재하지 않는 경우 DTO 이후에 추가됩니다. 예:
main.dts | overlay.dts | 병합된 결과 |
---|---|---|
[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"; }; }; |
하위 노드
다음은 하위 노드 문법의 예입니다.
main.dts | overlay.dts | 병합된 결과 |
---|---|---|
[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"; }; }; }; |