一、什么是设备树?
1.device tree ,设备树,是一种描述硬件的数据结构,在Linux内核中采用的参数表示和传递技术。由一系列被命名的节点(node)和属性(property)组成,而节点本身可包含子节点。所谓属性,其实就是成对出现的name和value。在Device Tree中,可描述的信息包括:CPU的数量和类别,内存基地址和大小,总线和桥,外设连接,中断控制器和中断使用情况,GPIO控制器和GPIO使用情况,Clock控制器和Clock使用情况。设备树基本上就是画一棵电路板上由CPU、总线、设备组成的树,Bootloader会将这棵树传递给内核,然后内核可以识别这棵树,并根据它展开出Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备。
2.dts device tree source ,设备树源文件,相当于xxx.c文件,就是用来做参数表示的,也就是说我们需要把参数写成源文件,按照格式将参数写出来,就构成了设备树源文件。
3.dtc device tree compiler ,设备树编译器,设备树编译/反编译/调试工具,负责将dts文件编译为可读取文件,参数文件相当于一些数字,这些数字经过编译之后就变成了二进制文件,dtc相当于一个编译工具,相当于gcc。
4.dtb device tree blob,二进制设备树镜像,可执行文件,dtc将dts编译出来的二进制设备树镜像就叫dtc. blob--二进制大对象,binary large object。相当于xxx.bin
5.dtsi,设备树源文件的头文件,相当于xxx.h
二、设备树如何工作?
1.驱动开发者编写dts,适配硬件和自己的需求。
2.make image的时候,kernel内部会先编译出编译工具dtc,然后用dtc将dts源文件加工成可执行文件dtb。
3.uboot启动kernel时,将image和dtb都准备好并告知image在哪里找dtb
4.kernel启动初期调用内部函数解析dtb,得到硬件信息,并组装成数据结构,配合策略函数工作。