什么是linux设备树

为什么要使用设备树?

随着嵌入式的发展,linux系统被嵌入到各行各业。就拿开发板而言,就有玲珑满目的开发板可供用户选择。于是就出现了一个问题:每一块开发板的内核里,都有描述属于自己开发板的信息,于是就因为硬件不同,就产生了大量的有差别的内核,然后这些内核每年都大量地上传到linux开源社区。这样子开源社区的管理员就不乐意了!内核里的区别就只是硬件描述不一样,一点技术含量都没有,然后每年还有处理筛选那么多这种内核岂不是要累死。于是就引进了linux设备树的概念,专门用来描述板级硬件设备。

设备树简介

“设备树”可以被bootloader(uboot)传递到内核, 内核可以从设备树中获取硬件信息。设备树就是以树状的结构描述硬件信息,树干(最大)就是指根节点,然后在根节点下细分子节点,子节点又可以分子节点。
文件名称:

  1. DTS 是指.dts格式的文件,是一种ASII 文本格式的设备树描述,也是我们要编写的设备树源码,一般一个.dts文件对应一个硬件平台,位于Linux源码的“/arch/arm/boot/dts”目录下。
  2. DTC 是指编译设备树源码的工具,一般情况下我们需要手动安装这个编译工具。
  3. DTB 是设备树源码编译生成的文件,类似于我们C语言中“.C”文件编译生成“.bin”文件。

设备树节点的属性

以如图根节点下的leds子节点为例介绍节点属性
在这里插入图片描述
既然是一个节点,就有节点属性来描述这个节点啦!这样系统才能认出是哪个节点。=号左边是节点名称,右边是具体内容。每个节点可以选用不同的属性进行描述。

node-name@unit-address{
    属性1 = …
    属性2 = …
    属性3 = …
    子节点…
}

下面来选择几个节点属性进行介绍

compatible属性

compatible属性值由一个或多个字符串组成,有多个字符串时使用“,”分隔开。
设备树中的每一个代表了一个设备的节点都要有一个compatible属性。 compatible是系统用来决定绑定到设备的设备驱动的关键。 compatible属性是用来查找节点的方法之一,系统在内核驱动中通过匹配字符串与compatible是否相等来寻找设备。

#address-cells 和 #size-cells属性

#address-cells和 #size-cells属性同时存在, 它们用在有子节点的设备节点(节点),用于设置子节点的“reg”属性的“书写格式”。
在这里插入图片描述
#address-cells,用于指定子节点reg属性“地址字段”所占的长度(单元格cells的个数)。 #size-cells,用于指定子节点reg属性“大小字段”所占的长度(单元格cells的个数)。

例如#address-cells=2,#address-cells=1,则reg内的数据含义为reg =

, 因为每个cells是一个32位宽的数字,例如需要表示一个64位宽的地址时,就要使用两个address单元来表示。 而假如#address-cells=1,#address-cells=1,则reg内的数据含义为reg = < address size address size address size>。

总之#size-cells和#address-cells决定了子节点的reg属性中哪些数据是“地址”,哪些数据是“长度”信息。

reg属性

reg 属性的值一般是(address, length)对。 reg 属性一般用于描
述设备地址空间资源信息,一般都是某个外设的寄存器地址范围信息
reg 属性值为<0x02280000 0x4000>,因为父节点设置了#address-cells = <1>, #size-cells = <1>, address= 0x02280000, length= 0x4000,相当于设置了起始地址为 0x02280000,地址长度为 0x40000。

带&符号的节点

在这里插入图片描述
不是说根节点“/”是最大的节点吗?为什么根节点外面还有节点呢?
其实,这些在外面的节点也是属于根节点的。节点带&代表这是一个追加节点,这个节点可能定义在本文件也可能定义在本文件所包含的设备树文件中(如.dtsi文件)

chosen子节点

chosen子节点不代表实际硬件,它主要用于给内核传递参数。 这里只设置了“stdout-path =&uart1;”一条属性,表示系统标准输出stdout使用串口uart1。 此外这个节点还用作uboot向linux内核传递配置参数的“通道”, 我们在Uboot中设置的参数就是通过这个节点传递到内核的, 这部分内容是uboot和内核自动完成的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值