Device Tree 是一种描述硬件的数据结构,它起源于 OpenFirmware ( OF )。在 Linux2.6 中, ARM 架构的板机硬件细节过多地被硬编码在 arch/arm/plat-xxx 和 arch/arm/mach-xxx ,采用 Device Tree 后,许多硬件的细节可以直接透过它传递给 Linux ,而不再需要在 kernel 中进行大量的冗余编码。
Device Tree 由一系列被命名的结点( node )和属性( property )组成,而结点本身可包含子节点。所谓属性,其实就是成对出现的 name 和 value 。
在 Device Tree 中,可描述的信息包括(原先这些信息大多被硬编码到 kernel 中):
· CPU 的数量和类别
· 内存基地址和大小
· 总线和桥
· 外设连接
· 中断控制器和中断使用情况
· GPIO 控制器和 GPIO 使用情况
· Clock 控制器和 Clock 使用情况
它基本上就是画一棵电路板上( CPU 、总线、设备组成)的树, Bootloader 会将这棵树传递给内核,然后内核可以识别这棵树,并根据它展开出 Linux 内核中的 platform_device 、 i2c_client 、 spi_device 等设备,而这些设备用到的内存、 IRQ 等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。
.dts 文件是一种 ASCII 文本格式的 Device Tree 描述。基本上,在 ARM Linux 中,一个 .dts 文件对应一个 ARM 的 machine ,一般放置在内核的 arch/arm/boot/dts/ 目录。由于一个 SOC 可能对应多个 machine (一个 SOC 可以对应多个产品和电路板),势必这些 .dts 文件需包含许多共同的部分, Linux 内核为了简化,把 SOC 公用的部分或者多个 machine 共同的部分一般提炼为 .dtsi ,类似于 C 语言的头文件。其他的 machine 对应的 .dts 就是 include 这个 .dtsi 。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69948385/viewspace-2675088/ ,如需转载,请注明出处,否则将追究法律责任。