Linux设备树解析

什么是设备树?

采用树形结构来描述板级文件。描述设备树的文件叫做DTS。

设备树因何而诞生?

       由于开发板根据我们的不同性能要求,每个上面都配备着不同的硬件设施,成千上万的开发板意味着成千上万的描述板级信息的文件。如果我们将这些文件烧写到Linux内核之中,会非常臃肿。

       所以使用一个专属的文件格式来描述,这就是设备树。将这些文件从内核中分离出来。但是实际上它还是放在Linux内核目录之中,不过它有一个独立的文件夹。

       在Linux源码中的有一些dts文件示例(dtsi,也就是多个开发板包含了一些相同的硬件,为了避免重复描述,所以放在了dts include 设备树头文件中):

可以看出一个板子对应一个dts文件。

针对于w25q.c(一个设备的驱动文件),实现它的功能也就是通过SPI通信来操作指定的寄存器。

只要按照通用的模版,提供一个读写函数,相当于实现同样的功能,只改变它的硬件接口,这个.c文件无论是应用于stm32还是nxp提供的开发板都是可以通杀的。此所谓驱动的复用

DTS、DTB、DTC的关系

dts ——> .c 文件 描述设备树的源代码

dtc ——> gcc工具 将dts编译生成为.dtb文件

dtb ——> .o文件 编译生成后的文件

一般操作是先编译Linux源码,生成dtc,然后make dtbs 。但是一般我们编译Linux源码的时候是make all ,也就是编译全部(内核,设备树等)。如果要编译某一个具体的dts。(注:make ..dtb)

但是就算使用make dtbs也只会编译那些被修改过的dts文件。

一个题外话:为什么我们执行make以后会编译对应的dts呢?

在Linux源码中arch/arm/boot/dts/Makefile中会定义要编译的dtb文件。

 所以我们编写好自己的dts文件后,需要在Makefile中添加,系统才会知道新的dts文件的存在,才会去编译它。

设备树结构

设备树结构总览

      设备树也有头文件,扩展名为.dtsi。可以将一款SOC的所有设备/平台共有的部分提取出来(一般就是一些很基础,必须存在的硬件)放到头文件中。比如dtsi里面有

cpu:

中断控制器:

 

晶振:

内部ram起始地址和大小:

串口7的接口:

       

      设备树是层层分级,类似于树干,树枝,树叶。比如说一块I.MX6ULL开发板,它的imx6ull.dtsi中的一级树枝有:cpus intc soc。在soc中有busfreq aips1 aips2 。在aips1中有gpio1 gpio2 ,在aips2中有IIC1 IIC2。

 以IIC为例,dtsi里面只包括IIC的最基础的一些属性:

如果我们的开发板需要添加一个IIC设备wm8960@1a,这种自定义的部分就在dts中以追加的方式实现:&

可以理解为:DTS文件以 ’/’ 开头。从/根节点开始描述设备信息,在根节点外可通过&来进行追加。比如说.dts文件里有/根节点内容,它包含的头文件.dtsi也有/根节点内容。但不同/根节点指向的是同一块根节点空间。

以上就是设备树的一些框架和设备树构建信息的解析,接下来,我还会写一篇文章介绍有关设备节点(某一个硬件设备)的基本属性描述和使用。

参考文献:正点原子教程

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值