当前位置:首页 > 问问

device tree是什么 什么是Device Tree

1、什么是device tree

Device tree是一种机器可读且描述硬件设备的数据结构。它通常用于嵌入式系统,尤其是用于Linux驱动程序。Device tree的目的是允许在不修改内核源代码的情况下向内核提供有关系统硬件的信息。

透过device tree,硬件设备如处理器、杂项控制器 (如PCI,USB、I2C、SPI、GPIO等)、内存、中断、时钟等均可被描述。它通过描述每个设备所拥有的寄存器、中断和其他属性,来说明这些硬件的详细信息。

2、Device Tree的作用

使用device tree在更改硬件或运行不同的操作系统版本的时候,维护内核和驱动程序之间的接口映射关系。由于内核编译时硬件信息必须已知,通过使用device tree,内核可独立于具体平台地构建,甚至在运行时动态地加载,而在将来的系统支持中只需添加新的device tree即可。

Device tree主要作用有:

  • 在Linux中描述硬件和板级支持包,让驱动程序可以独立于平台运行,提高了驱动程序的移植性
  • 使得从芯片设计到操作系统实现之间的交互解耦合
  • 提供了一种机制来防止在编译内核时犯错或者添加和删除硬件时犯错

3、Device Tree的结构

Device Tree的结构分为三层:根节点、中间层节点、叶节点。每个设备节点都有一个设备名标识符,该标识符是一个文本字符串,并且需要全局唯一。在device tree中,英文单词只出现在设备名标识符、属性名和属性值之间的分隔符中,而不出现在其他位置。例如,“gpio-controller@48032000”中,gpio-controller既是一个设备名标识符,也是一个属性名。

在device tree中,每个设备节点(non-root)必须包含以下基本属性:

  • compatible 属性(必输项):描述设备、硬件或Firmware的唯一性,其格式通常包括设备厂商、设备或芯片名称和版本信息。
  • reg 属性(必输项):描述硬件资源寄存器的物理基地址和大小。
  • interrupts 属性(必输项):描述设备(针脚)IRQ的物理编号和中断类型。

4、Device Tree的生成和使用

设备树的生成需要在硬件平台的部分文件中添加所需的属性、节点信息,并使用dtc(device tree compiler)编译成设备树二进制文件(.dtb)。在Linux系统启动时,bootloader将此设备树提供给内核,内核解析它以获取硬件信息并相应地初始化设备和驱动程序。

设备树的使用主要有三种方式:

  1. 在内核cmdline中显式指定设备树文件(./arch/arm/boot/dts/am335x-boneblack.dtb)
  2. 在uboot bootloader环境变量bootargs中显式指定设备树文件
  3. 使用默认设备树文件。默认设备树文件一般位于/boot/dtbs/下,以架构、制造商、型号等命名

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章