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的结构一致。