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를 사용할 수 있다.

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로 다음 노드를 가리킨다.
  • 마지막 노드는 allnext 가 NULL pointer를 가리킨다.
 

트리 순회 과정

 

+ Recent posts