티스토리 뷰
(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 |