Device tree
- Device tree 는 시스템안에 존재하는 device들을 명시하는 노드들로 구성된 tree data structure를 의미한다. 각 노드는 각 디바이스의 특징들을 표기한 property/ value 쌍으로 이루어져 있다. 디바이스 트리는 루트노드를 제외하고 정확히 하나의 parent를 갖는다.
Device tree의 Life Cycle
- device tree는 아래 그림과 같은 Life Cycle을 갖는다. 프로그램에도 소스,컴파일러와 바이너리가 있듯이, device tree도 소스인 .dts 파일과 컴파일러인 dtc, 컴파일의 결과물인 .dtb파일이 존재한다.
- 컴파일에 의해 생성된 .dtb파일은 boot loader에 의해 메모리에 FDT(flattened device tree)형태로 적재되고 이 후에 linux kernel에 의해 expanded DT형태로 변환되어 dt사용자가 API함수(eg. of_function)호출을 통해 dt를 사용할 수 있게 된다.
- Device driver를 사용하는 입장에서는 dts와 Expanded DT가 어떻게 연관되어 있는지를 알면 dt를 사용할 수 있다.
Device tree source
- Device tree source 파일은 dts와 dtsi 등의 여러개의 파일로 구성된다.
- .dts파일은 최상위 Device tree 파일로, 복 수 개의 .dtsi 파일들을 포함한다.
- .dtsi 파일에는 SoC-level 정보가 정의되어있는것이 일반적이다.(필수사항은 아니다.)
- .dts 파일에는 board-level의 정보를 포함하는것이 일반적이다.
Expanded DT format
- tree 구조
- of_*() 함수 호출을 통해 접근할 수 있다.
- 모든 노드가 Linked list로 연결되어 있다.
- boot가 이루어지는 동안 생성된다.
- boot 이 후에 Node와 Property가 추가되거나 삭제될 수 있다.
- 아래 그림은 Expanded DT format의 하나의 node의 정보를 담는 device_node 구조체이다.
트리 순회
- 좌측 상단의 root node로부터 시작하여 child는 자식노드, Sibling은 같은 레벨에 있는 형제노드, allnext노드는 Depth first로 다음 노드를 가리킨다.
- 마지막 노드는 allnext 가 NULL pointer를 가리킨다.