NXP i.MX SoC Family/Device Trees

Introduction to Device Trees - Syntax

까마귀75 2022. 10. 11. 16:23
728x90
반응형

3 Syntax

디바이스 트리는 노드와 속성의 단순한 트리 구조이다. 속성은 키-값의 쌍이며, 속성과 자식 노드를 모두 포함할 수 있다. 다음 섹션에서는 디바이스 트리 노드의 기본 구문과 부모/자식 노드 관계를 검토한다.

 

3.1 Node names

노드 이름은 노드를 식별하는 데 사용되는 레이블이다. 노드의 유닛-주소 컴포넌트는 노드가 있는 버스의 기본 주소를 식별한다. 이것은 디바이스에 액세스하는 데 사용되는 기본 주소이다.

 

자식 노드는 고유한 이름을 지정해야 하지만, "unit name"으로 주소를 지정할 수도 있다. 이 이름은 동일한 레벨에서 동일한 이름(예: 동일한 SoC의 여러 I2C 디바이스)을 가진 노드를 구별하는 데 사용된다. 유닛 이름은 노드 이름, "@" 기호와 유닛 주소(예: i2c@3000, i2c@4000 등)로 구성된다.

 

동일한 노드의 여러 정의가 Device Tree Compiler에 의해 하나로 병합된다.

 

3.2 Properties

노드에는 name = value 형식으로 정렬된 여러 속성이 포함될 수 있다. name은 문자열로 구성되는 반면에, value는 문자열, 바이트, 숫자나 phandle 배열이거나 혼합 유형이 될 수 있다. 예를 들어, value는 다음과 같을 수 있다:

  • compatible = "fsl,mpc8610-msi", "fsl,mpic-msi";
  • reg = <0 0 0x8000000>;
  • interrupt-parent = <&mpic>;
참고
숫자는 디바이스 트리에서 항상 32비트의 빅엔디안이다. 경우에 따라, 더 큰 값(예: 64비트)을 나타내기 위해 여러 개의 32비트 빅엔디안 숫자가 사용된다.

 

3.3 Phandle

phandle(pointer handle: 포인터 핸들)은 노드와 연결된 32비트 값이다. 이 값으로 노드를 고유하게 식별하여, 해당 노드를 다른 노드의 속성에서 참조할 수 있도록 한다. 간단히 말해서, 다른 노드를 위한 포인터를 포함하는 한 노드의 속성이다. phandle은 각 레이블에 대해 디바이스 트리 컴파일러나 U-Boot에 의해 생성된다.

 

다음 예에서, <&label>은 DTC에 의해 레이블이 지정된 노드에 대한 phandle로 변환된다.

name@address {
    <key> = <&label>;
};

label: name@adresss {
}

인터럽트에 가장 일반적으로 사용된다. Listing 1(5 Interrupts)에서, interrupt-parent는 레이블이 mpic인 노드의 phandle을 할당한다.

 

3.4 Aliases

aliases 노드는 다른 노드의 인덱스이다. 노드의 속성은 phadle이 아니라 디바이스 트리 내의 경로이다.

aliases {
    ethernet0 = &enet0;
    ethernet1 = &enet1;
    ethernet2 = &enet2;
    serial0 = &serial0;
    serial1 = &serial1;
    pci0 = &pci0;
};

 

 

728x90
반응형