补一点基础知识
一、dts产生原因
DTS即Device Tree Source 设备树源码,是一种描述硬件的数据结构。替代原有的spec代码,更便于管理。本质上,Device Tree改变了原来用hardcode方式将HW配置信息嵌入内核代码的方法,改用bootloader传递一些参数。
如果我们认为kernel是一个black box,那么其输入参数应该包括
a.识别platform的信息
b.runtime的配置参数
c.设备的拓扑结构以及特性
对于嵌入式系统,在系统启动阶段,bootloader会加载内核并将控制权转交给内核,此外,还需要把上述的三个参数信息传递给kernel,以便kernel可以有较大的灵活性。在linux kernel中,Device Tree的设计目标就是如此。
二、dts基本知识
2.1 dts加载过程
使用device tree,需要用户了解自己的硬件配置与系统运行参数,并把这些信息组织成Device Tree source file。通过DTC编译成DTB。在系统启动时,boot可以将保存在flash中的dtb复制到内存(也可以是其他方法),并把DTB起始地址传递给client program。
2.2 dts描述信息
Device Tree由一系列被命名的节点和属性组成。它基本上就是画一棵电路板上CPU、总线、设备组成的树,Bootloader会将这棵树传递给内核,然后内核可以识别这棵树,并根据它展开出Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。
可描述的信息包括:
CPU的数量和类别
内存基地址和大小
总线和桥
外设连接
中断控制器和中断使用情况
GPIO控制器和GPIO使用情况
Clock控制器和Clock使用情况
正常情况下所有的dts文件以及dtsi文件都含有一个根节点”/”,这样include之后就会造成有很多个“根节点”。按理说 device tree既然是一个树,那么其只能有一个根节点,所有其他的节点都是派生于根节点的child node。其实Device TreeCompiler会对DTS的node进行合并,最终生成的DTB中只有一个root node.
device tree的基本单元是node。这些node被组织成树状结构,除了root node,每个node都只有一个parent。一个device tree文件中只能有一个root node。每个node中包含了若干的property/value来描述该node的一些特性。每个node用节点名字(node name)标识,节点名字的格式是node-name@unit-address。如果该node没有reg属性(后面会描述这个property),那么该节点名字中必须不能包括@和unit-address。unit-address的具体格式是和设备挂在那个bus上相关。例如对于cpu,其unit-address就是从0开始编址,依次加一。而具体的设备,例如以太网控制器,其unit-address就是寄存器地址。rootnode的

DTS是设备树源码,一种描述硬件数据结构,用于替代硬编码的HW配置。在系统启动时,bootloader传递DTB给内核,内核据此配置平台设备和资源。DeviceTree包含CPU、总线、设备等信息,其compatible属性用于驱动匹配,status属性描述设备状态,reg属性定义设备地址空间。
最低0.47元/天 解锁文章
559

被折叠的 条评论
为什么被折叠?



