1. 디바이스 트리 전체 구조 소개
1.1 확장자 .dtsi, .dts
1.2 상속 및 include
계층구조를 유지하기 위해 하위보드는 상위보드 혹은 SoC의 dts를 상속 받을 수 있으며, include문 (혹은 C의 #include 도 가능)을 사용하여 상위보드 혹은 SoC를 위한 dts 파일을 포함 시킬 수 있다.
1.3 중복 시
하위보드에서 정의한 내용 중, 상위보드의 내용과 중복되는 내용은 하위보드에서 정의한 내용이 최종적으로 반영되며, 중복되지 않은 내용은 새로 추가(역시 반영) 된다.
1.4 SoC 구조
SoC의 구조를 보면, 대개 cpu, memory, system bus, system bus에 연결된 각종 device controller, device controller에 연결된 consumer device들로 구성되어 있으므로, 이를 모두 node로 표현하면 된다.
-> OCP(On Chip Peripheral)
---.dts + ---.dtsi = ~~~.dtb
dts => .c
dtsi => .h
dtbo => OUTPUT file
출처
https://slowbootkernelhacks.blogspot.com/2014/03/beaglebone-linux-kernel310x-programming.html
2. 디바이스 트리에서의 장치 표현 방식
1. 디바이스는 노드로 표현하며 (예 : 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와 연결된 slave node (device)의 관계로 이해
4. 노드 앞부분에 별명(alias)를 붙일 수 있으며 (예 : node1), 다른 노드에서는 주로 이 별명을 활용하여 해당 노드를 참조하게 되는데 이때는 &기호를 사용한다. (예 : &node1)
- 별명을 사용하는 이유 : 주소값 등이 붙어있는 복잡한 노드에 대한 표현이 훨씬 간단해짐
5. 실제로는 매우 다양한 장치가 존재하므로, 자신만의 독자적인 device를 표현하기 위해서는 binding 문서를 잘 정리해두어야 한다.
- /Documentation/deviceTree/binding
'Embedded : : Linux' 카테고리의 다른 글
Hot Plug / Cold Plug (0) | 2024.11.12 |
---|---|
확장자 별 파일 역할 (.mk .xml .prop .rc .dts .dtsi) (0) | 2024.10.31 |
크로스 컴파일 (0) | 2024.10.31 |
dump_stack() (0) | 2024.10.31 |
리눅스가 널리 채택된 요인들 (1) | 2024.10.13 |