DTO 문법

기기 트리 소스(DTS) 형식에는 기기 트리가 텍스트 형식으로 표현되어 있습니다. 기기 트리 컴파일러(DTC)는 이러한 형식을 Linux 커널에서 기대하는 형식인 바이너리 기기 트리로 처리합니다.

참조 사용

DTC(기기 트리 컴파일러 + 오버레이 패치) 프로젝트는 dtc-format.txtmanual.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";
    };
  };
};