1、 话不多说,直奔主题

设备树是Linux系统比较重要的一部分,可谓核心也它,细节也它。从大方面看,简单配置设备树,驱动则起来;从小方面看,配置设备树以及修改驱动程序,驱动挂载起来。

以前的NXP、三星6410以及龙芯开发平台,也结合代理商的协助,都是被驱动化的开发,设备树基本不碰,最多也就是编译,这样的情况很不利于对系统的深究以及日后开发的技术储备,

现在接触到更适合IPC方案的RK芯片-RV1126,撇去代理商的例如RP的封装,用最为原生的Linux以及驱动更加可能作为迁移能力的技术储备。

例如配置一个串口的驱动,因绝大部分的串口都是“祖传驱动“完成了架构和基础,所以只需要根据电路图配置串口的设备树:

Q1:pinctrl-0 什么意思?

Q2:status?

简单回答:

A1:pinctrl系统的某一个GPIO的简易定义。

A2:使能该节点。

 或许这样的回答会让你求知欲更强。

2. 了解DTX系列的概念

DTSI:该部分代码如同头文件定义的结构体或者变量,板级的代码均在这里体现,如:

 

 uart4 是作为一个serial在ff590000地址处,表明了具体内存地址的设备。

DTS: 该部分代码如同源文件的定义以及调用,针对不同的板级芯片,可以选择不一样的设备树(DTS),如:

 

 

DTC: 有GNU的gcc,同样有DTB的DTC,作为一个DT的编译器,它的工作是把DTS源代码编译为DTB,提供系统使用。(所以有设备修改驱动就要更新设备树,文件替换即可)

 

DTB: 该文件格式则为编译后的DTS,是最终产物。

DTX的相关概念比较容易理解,主要是一个源码到执行文件的过程。

3. 基于串口和SPI的标准例子阐述
A- 串口的设备树

 

 用到pinctrl系统就要用到

 

 

dtsi的作用非常大,因为复用的多,所以要针对电路图选择对应的引脚,pinctrl系统就是针对gpio实现,真正的意义如下:

 

 

 对比下,就一目了然。

 

B- SPI驱动,在完成SPI驱动程序后,下一个步骤就是整合设备树

 

 st7735s是一个自定义的节点,跟驱动程序匹配起来,该节点是挂载在SPI1这条总线上。

compatible:作为兼容的名称,驱动程序匹配。

status:状态

具体spi的参数,都在st7735s节点下配置,以及gpios的配置,也是在驱动挂载过程中体现的默认GPIO状态。

DTS这部分调用的是DTSI的代码或结构体,取spi1地址就可以拿到spi1的参数,对于配置一个设备,相对来讲,在完成

设备代码后,比较简单。

4. 编译kernel

 

 在进行kernel编译后,会出现dtb的生成,关键细节

 

 

 

DTB部分信息,跟DTS的结构一致。