DTO 문법

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

참조 사용

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";
    };
  };
};