Dts设备树配置

DTS设备树简介

Linux 设备树(Device Tree)是一种用于描述硬件设备信息的数据结构和标准,在内核与硬件之间建立起沟通桥梁,让内核能以统一方式获取硬件信息。

基本结构 设备树本质上是一种树形的数据结构,采用了类似 C 语言结构体嵌套的方式来描述硬件。它由节点(Node)和属性(Property)组 成。节点用于表示一个硬件设备或者设备组,属性则用来描述设备的各种参数和特性。

文件格式 常见的设备树文件格式有.dts(Device Tree Source)文本格式和.dtb(Device Tree Binary)二进制格式。.dts文件便于人工编写和修改,而.dtb文件是.dts经过编译后的二进制文件,内核加载的是.dtb文件。

作用与优势

  • 分离硬件和内核代码:通过设备树,硬件信息从内核代码中分离出来。当硬件平台发生变化时,只需修改设备树文件,而无需修改内核源代码,大大提高了内核的可移植性和可维护性。

  • 支持动态硬件配置:设备树允许在内核启动时动态地传递硬件信息,使得内核能够根据不同的硬件配置进行相应的初始化和驱动加载,这对于具有多种硬件配置的设备(如开发板的不同扩展模块)非常有用。

  • 促进代码复用:不同的硬件平台如果具有相似的硬件设备,可以复用相同的设备树描述和驱动程序,只需要在设备树中对一些具体的参数进行调整即可,提高了开发效率。

DTS设备树配置方法

DTS设备树文件路径

【XNIUPI-小牛派】R系列开发平台,DTS设备树文件均位于以下目录: <SDK>/kernel/arch/arm64/boot/dts/rockchip/

设备树修改与编译

第一步:明确需要修改的.dts板级配置文件。

第二步:根据硬件信息和实际需要,修改.dts/.dtsi设备树文件。

第三步:编译内核。我们一般不单独编译DTS设备树文件,如果我们修改了DTS设备树,那么我们通过./build.sh kernel直接编译整个kernel即可,编译生成的boot.img即包含最新的设备树文件(dts经过编译后的生成的二进制dtb文件)。

第四步:验证功能。将编译好的boot.img烧录到主板进行测试,看是否符合预期,如果不符合预期则回到第二步重新检查修改。

Linux 设备树怎么工作

内核启动加载

在系统启动时,Bootloader(如 U-Boot)会将.dtb文件传递给内核。内核启动过程中,会解析.dtb文件,获取硬件信息,并根据这些信息加载相应的驱动程序,完成硬件设备的初始化。

驱动程序匹配

驱动程序中会定义一个compatible属性,与设备树中设备节点的compatible属性进行匹配。当两者匹配成功时,内核就会调用该驱动程序来初始化和管理对应的硬件设备。