9. 设备树的简介

9.1. 设备树的介绍

设备树的作用就是描述一个硬件平台的硬件资源。这个“设备树”可以被bootloader(uboot)传递到内核, 内核可以从设备树中获取硬件信息。

未找到图片device_tree001

设备树描述硬件资源时有两个特点。

  • 第一,以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根节点”, 挂载到本地总线的IIC总线、SPI总线、UART总线为树的“枝干”在设备树里称为“根节点的子节点”, IIC 总线下的IIC设备不止一个,这些“枝干”又可以再分。

  • 第二,设备树可以像头文件(.h文件)那样,一个设备树文件引用另外一个设备树文件, 这样可以实现“代码”的重用。例如多个硬件平台都使用RK3568作为主控芯片, 那么我们可以将RK3568芯片的硬件资源写到一个单独的设备树文件里面一般使用“.dtsi”后缀, 其他设备树文件直接使用“#includexxx”引用即可。

如 arch/arm64/boot/dts/rockchip/rk3568.dtsi,这个文件一般由芯片厂商提供,其中几乎包含了rk3568芯片中所有设备及外设接口。 在我们使用时,我们只需要在我们板卡的设备树源文件中#include “rk3568.dtsi”就可以导入rk3568这可芯片所有的设备, 然后我们再根据板卡上的外设来修改即可。

9.2. 常见的几个DT

  • DTS 是指.dts格式的文件,是一种ASII 文本格式的设备树描述,也是我们要编写的设备树源码,一般一个.dts文件对应一个硬件平台。在Linux源码的“arch/arm64/boot/dts/”目录下又根据芯片厂商进行分类。

  • DTSI 是指由芯片厂商提供,是同一芯片平台“共用”的设备树文件。

  • DTC 是指编译设备树源码的工具,一般情况下我们需要手动安装这个编译工具。

  • DTB 是设备树源码编译生成的文件,类似于我们C语言中“.C”文件编译生成“.bin”文件。

  • DTBO 是设备树叠加层编译生成的文件,可以对DTB进行叠加补充。

9.3. 设备树的节点编写

具体详细的编写教程可以参考 Linux设备树