第18章ARM LInux设备树

本章导读
本章将介绍Linux设备树(Device Tree)的起源、结构和因为设备树而引起的驱动和BSP变更。
18.1节阐明了ARM Linux为什么要采用设备树
18.2节详细剖析了设备树的结构、节点和属性,设备树的编译方法以及如何用设备树来描述板上的设备、设备的地址、设备的中断号、时钟等信息。
18.3节讲解了采用设备树后,BSP和驱动的代码需要怎么改,哪些地方变了。
18.4节补充了一些与设备树相关的API定义以及用法。
本章内容是步入Linux3.x时代后,嵌入式Linux工程师必备的知识体系。

18.1ARM设备树起源
内核中充斥着大量垃圾代码。
设备树是一种描述硬件的数据结构,采用设备树后,许多硬件的细节可以直接通过它传递给Linux,而不需要在内核中进行大量的冗余编码。
设备树由一系列被命名的节点(Node)和属性(Property)组成,而节点本身可包含子节点。所谓属性,其实就是成对出现的名称和数值。在设备树中,可描述的信息包括(原先这些信息大多被硬编码在内核中):
*cpu的数量和类别
*内存基地址和大小
*总线和桥
*外设连接
*中断控制器和中断使用情况
*GPIO控制器和GPIO使用情况
*时钟控制器和时钟使用情况
它基本上就是画一棵电路板上CPU、总线、设备组成的树,BootLoader会将这些树传递给内核,然后内核可以是被这颗树,并根据它展开出Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。
18.2设备树的组成和结构
整个设备树牵扯面比较广,即增加了新的用于描述设备硬件信息的文本格式,又增加了编译这个文本的工具,同时BootLoader也需要支持将编译后的设备树传递给Linux内核。
18.2.1 DTS、DTC和DTB等
文件.dts是一种ASCII文本格式的设备树描述。在ARMLinux中,一个.dts对应一个ARM的设备,一般放置在内核的arch/arm/boot/dts/目录中。
把SOC公用部分或多个设备共同部分一般提炼为.dtsi.
2.DTC(Device Tree Compiler)
DTC是将.dts编译为.dtb的工具。DTC的源代码位于内核script/dtc目录中
3.DTB(Device Tree Blob)
文件.dtb是.dts被DTC编译后的二进制格式的设备树描述,可由Linux内核接卸,当然U-Boot这样的BootLoader也是可以识别.dtb的。
通常我们为电路板制作NAND、SD启动镜像时,会为.dtb文件单独留下一个很小的区域以存放之,之后BootLoader在引导内核的过程中,会先读取该.dtb到内存。

猜你喜欢

转载自blog.csdn.net/su1041168096/article/details/79763884