![70e7ca54b364b9170d3a61f732312527.png](https://img-blog.csdnimg.cn/img_convert/70e7ca54b364b9170d3a61f732312527.png)
原文博客链接:
小白带你探索Linux设备树1_框架篇V1_linux,驱动程序,arm_qq_35712169的博客-CSDN博客blog.csdn.net![a666ec468ef0b426c0d3d1b0dcf76751.png](https://img-blog.csdnimg.cn/img_convert/a666ec468ef0b426c0d3d1b0dcf76751.png)
注:感觉CSDN的排版会好点
目录一览
- 0. 说在前面的话
- 1. 什么是设备树
- 1.1 设备树的定义
- 1.2 设备树的使用
- 2. ARM Linux设备树的起源
- 2.1 忍无可忍
- 2.2 事件背景
- 3. DT的文件组织结构
- 3.1 dts目录简介
- 3.2 dts分析文件下载
- 3.3 完整dts文件的组成
- 4. DT的语法组织框架
- 4.1 DT的基本语法
- 4.2 DT的简化框架
- 4.3 根节点的model与compatible
- 4.4 节点名字
- 4.5 reg属性
- 4.6 interrupts属性
- 4.7 其他属性
- 4.8 特殊节点
- 5. 总结
- 参考文献
0. 说在前面的话
学习过程中的总结记录,感悟比较浅显,经不起推敲,欢迎批评指正!!!
文章主体是以imx8qm-mek评估板为实例进行介绍设备树。
1. 什么是设备树
1.1 设备树的定义
官方定义:
The primary purpose of Device Tree in Linux is to provide a way to describe non-discoverable hardware. This information was previously hard coded in source code.
ARM设备树出现之前的电路板硬件的细节被硬编码到内核中了,导致内核代码臃肿难以维护,因此将内核与那些臃肿的硬件代码解耦,方便维护。
1.2 设备树的使用
首先看下设备树如何被被加载到内核当中的过程
![361e7a3377c87d1f7eef9088980a024a.png](https://img-blog.csdnimg.cn/img_convert/361e7a3377c87d1f7eef9088980a024a.png)
首先将上图涉及到的dts、dtb、dtc简单说明下。
- dts:device tree source 设备树源文件,也就是我们进行编辑的文件,用于增删相关的硬件细节,可以看做C之类的代码,并且支持部分C语法,后面会详谈;
- dtb:device tree blob 可以视为二进制版本的dts,内核可以解析;
- dtc:device tree compiler 设备树编译器,dtb文件就是通过dtc将dts文件编译而成的。个人感觉可以类比C语言的编译。
上图可以总结为:
利用dtc将dts文件编译为可被内核解析的dtb文件,通过bootloader的引导,kernel会将dtb文件加载到内存,并进行解析。 在没引进设备树之前,当每次更改设备,都需要重新编译内核,而现在仅仅需要编译设备树即可,省时省力。
2. ARM Linux设备树的起源
2.1 忍无可忍
设备树出现的原因,还得从2011年3月17日Linus Torvalds的那封信说起,下面是信件的截图:
![94e926f3fe20b73e4526bfe5074fdd9a.png](https://img-blog.csdnimg.cn/img_convert/94e926f3fe20b73e4526bfe5074fdd9a.png)
因ARM带来大量的板级细节代码,导致内核中充斥着大量的垃圾代码,最后Linus忍无可忍了,于是乎这就成了ARM Linux设备树诞生的契机。
2.2 事件背景
对事件背景感兴趣的详见wowo写的Device Tree(一):背景介绍,我就不在这里班门弄斧了。下面是wowo的总结的部分内容:
每次正式的linux kernel release之后都会有两周的merge window,在这个窗口期间,kernel各个部分的维护者都会提交各自的patch,将自己测试稳定的代码请求并入kernel main line。每到这个时候,Linus就会比较繁忙,他需要从各个内核维护者的分支上取得最新代码并merge到自己的kernel source tree中。Tony Lindgren,内核OMAP development tree的维护者,发送了一个邮件给Linus,请求提交OMAP平台代码修改,并给出了一些细节描述:
- 1、简单介绍本次改动
- 2、关于如何解决merge conficts。有些git mergetool就可以处理,不能处理的,给出了详细介绍和解决方案
一切都很平常,也给出了足够的信息,然而,正是这个p