티스토리 뷰

(http://elinux.org/Device_Tree_Usage를 번역한 것입니다.)


Linux Device Tree


key wording => kernel programming


Device Tree 란?

- 일정한 형식을 갖춘 text를 이용하여, hardware(SoC, Board)를 기술하는 것을 말함.

이와 대비되는 기존의 방식으로 platform device 기반의 board 기술 방식(C coding)이 있었음.


<등장 배경 및 기존 방식의 문제점>


  1) SoC 혹은 board 별로 독자적인 code 구현
  2) 같은 SoC에서 파생된 보드 간에 상호 연관성이 있음에도 불구하고, 이를 전혀 고려하지 않고, 별도로 구현함.
  3) 따라서, 코드의 복잡도 및 코드량이 늘어는 문제 발생함.
     : arch/arm/mach-{YOURBOARD}/board-*.c 파일이 매우 복잡하고 난해함.
     : ARM linux 진영의 골칫거리. Linus Torvalds의 지적 !
  4) 보드 구성이 바뀌더라도 kernel code를 수정하지 않고, 동작할 수 있는 방식의 필요성 인식
  5) Device Tree는 기존에 다른 쪽(CPU)에서 사용하던 방식으로 ARM에도 채용하게 됨.
     : 새로 나오는 보드로 개발을 진행하여, linux kernel에 자신의 코드를 반영하고자 한다면, 반드시 device tree 기반으로 작업이 이루어져야 함.


 [참고] SoC(System-on-a-chip 또는 System on chip, 단일 칩 시스템)


- 하나의 집적회로에 집적된 컴퓨터나 전자 시스템 부품을 가리킨다. 디지털 신호, 아날로그 신호, 혼성 신호와 RF기능등이 단일 칩에 구현되어 있다.

- 특정 응용에서 단일 칩 시스템을 구현할 수 없을 경우, 단일 패키지에 여러 칩을 구성한 단일패키지 시스템(SIP)을 사용할 수 있다. 단일 칩 시스템은 단일 면적에 제조되는 소자수가 많아지고 패키지가 단순해지기 때문에 생산비용이 크게 감소되는 것으로 신뢰성을 얻는다.




<Device Tree에서의 장치 표현 방식 소개>


1) device는 노드로 표현하며(예: node@0), 각각의 노드는 다양한 속성 정보를 갖는다.
  : 각각의 device는 서로 다른 속성 정보(예: address, interrupt 정보 등)를 가짐.
  : 특히, compatible 속성은 device driver와 연결되는 부분으로, device driver code에서 관련 compatible string을 검색해 보면, 연결된 platform driver를 찾을 수 있음.

2) node@ 뒤에 붙는 숫자는 unit address로, 장치에 접근하기 위해 사용되는 1 차 주소이고, 노드
내의 reg 속성에 나열되어 있는 정보에 해당한다.
  : unit address가 필요한 이유는 동일한 장치(예: uart)가 여럿 존재할 경우, 이를 구분해가 위해서임.

3) 노드내에는 또다른 노드(자식 노드)가 올 수 있다.
  : device controller와 연결된 consumer(혹은 slave) device의 관계로 이해하면 될 듯.

4) 노드는 앞 부분에 별명(alias)을 붙일 수 있으며(예: node1), 다른 노드에서는 주로 이 별명을  활용하여 해당 노드를 참조하게 되는데, 이 때는 & 기호를 사용한다(예: &node1).
  : 별명을 사용하는 이유는, 주솟값 등이 붙어 있는 복잡한 노드에 대한 표현이 훨씬 간단해지기 때문임.
  : consumer device -> controller로의 접근을 표현(예: interrupt, clock, pinctrl 등)

5) 실세계에는 매우 다양한 장치(device)가 존재하므로, 자신만의 독자적인 device를 표현하기 위해서는 binding 문서(Documentation/devicetree/bindings)를 잘 정리해 두어야 한다(검증도 필요함).
  : 실제로 여러 dts[i] 파일 내용을 살펴 보면, 생각 보다 매우 복잡한 표현이 많이 있음.





'4학년 1학기 > Linux && ubuntu' 카테고리의 다른 글

vmware Ubuntu에서 BBB로 파일 옮기기  (0) 2017.05.16
BeagleBone 블랙 내장 LED  (1) 2017.04.12
C언어의 agrv[argc]  (0) 2017.04.11
리눅스 시스템 구조(커널과 쉘)  (0) 2017.04.11
Bash Script  (0) 2017.04.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함