Linux学习之设备树(DeviceTree)(一)

  • Post author:
  • Post category:linux


和笔者新人,正在跟着正点原子的驱动指南自学Linux驱动开发。

一、什么是设备树

设备树,在Linux内核3.x版本以后,新增了支持设备树的功能。那么设备树到底是什么呢?

从图上可以看到, 树的主干就是系统总线, IIC 控制器、 GPIO 控制器、 SPI 控制器等都是接到系统主线上的分支。IIC 控制器有分为 IIC1 和 IIC2 两种,其中 IIC1 上接了 FT5206 和 AT24C02这两个 IIC 设备, IIC2 上只接了 MPU6050 这个设备。

所以,不难发现,通过设备树就可以了解到当前SOC上所支持哪些外设;设备树可以来面熟板子上的设备信息。

二、DTS、DTB、DTC

在进行开发时总能看到一些以xxxx.dts和xxxxx.dtb为后缀的文件。

DTS:(Device Tree Source)表示当前文件是设备树的源文件

DTB:表示当前文件是由dts文件通过dtc工具编译而成的设备树文件的二进制文件。

DTC: 将.dts 编译为.dtb的工具,DTC 工具源码在 Linux 内核的 scripts/dtc 目录下,

scripts/dtc/Makefile

在工具中可能会需要将dtb和dts文件进行反编译,指令为:

dtbf反编译生成dts:

dtc -I dtb -O dts -o xxxxx.dts xxxx.dtb

dtc -I fs -O dts /proc/device-tree/ > xxxxx.dts

dts编译生成dtb:

dtc -I dts -O dtb -o xxxxxx.dtb  xxxxx.dts 

三、设备树的语法

1,支持头文件包含

和 C 语言一样,设备树也支持头文件,设备树的头文件扩展名为.dtsi

如下例子,既可以包含.h文件,dts文件。

我们在编写设备树头文件的时候最好选择.dtsi 后缀。

#include "imx6ull-14x14-evk.dts"
#include <dt-bindings/gpio/gpio.h>
#include "skeleton.dtsi"

一般.dtsi 文件用于描述 SOC 的内部外设信息,比如 CPU 架构、主频、外设寄存器地址范围,比如 UART、 IIC 等等。

2.设备节点

设备树是采用树形结构来描述板子上的设备信息的文件,每个设备都是一个节点,叫做设备节点,每个节点都通过一些属性信息来描述节点信息,属性就是键值对。



版权声明:本文为Z919192470原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。