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;
};
'NXP i.MX SoC Family > Device Trees' 카테고리의 다른 글
Introduction to Device Trees - Interrupts (0) | 2022.10.12 |
---|---|
Introduction to Device Trees - Memory mapping and addressing (0) | 2022.10.12 |
Introduction to Device Trees - Basic device tree (0) | 2022.10.11 |
Introduction to Device Trees - Introduction (0) | 2022.10.11 |
Introduction to Device Trees (0) | 2022.10.11 |