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를 사용할 수 있다.
Life Cycle of device tree
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로 다음 노드를 가리킨다.