概述
设备树(devicetree),通俗的讲就是将设备描述信息抽象成树的结构。树的主干为系统总线,也就是根节点,根节点下是各种总线控制器,控制器下则是一系列硬件设备节点等。
在Linux2.6中,板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,导致内核变得庞大且冗余,然而这些板级细节对于内核来讲,不过是垃圾,因此设备树应运而生,工程师可以将硬件细节直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。
注意
1、dts(DeviceTreeSource),设备树源文件,放在内核的/arch/arm/boot/dts目录。
2、dtsi(DeviceTreeSourceInclude),设备树共有信息,类似C语言的头文件。
3、dtb(DeviceTreebinary),设备树dts文件编译后的目标文件,传递给内核,由内核进行解析。
4、dtc(DeviceTreeCompiler),设备树编译工具,用于将设备树dts文件编译成dtb文件。
5、设备树执行流程:
①、用户编写dtsi、dts文件。
②、执行命令makedtbs,使用DTC工具将dts文件编译成目标文件dtb。
③、uboot启动时自动将dtb文件传递给内核。
④、内核解析dtb文件。
接口
设备树(由节点构成)语法:
①节点命名一般为label:node-name
unit-address格式。label表示节点标签,目的是为了方便访问节点。访问节点通过label。
node-name表示节点名,字符串类型,用于描述节点功能。
unit-address一般为设备地址或寄存器首地址,也可以没有。
注意:node-name
unit-address才表示节点名。fengdts:fdts
{...reg=0x0x70xx8;child_fnode1:fnode1{...reg=0x0x;};};左右滑动