msm8909+android5.1 device tree(dt) 设备树组成和编译
源代码:/kernel/scripts/dtc
工具:device\qcom\common\dtbtool
1. Device tree设备树概述
设备树包含DTC(device treecompiler),DTS(device treesource和DTB(device treeblob)。其对应关系如图1-1所示:
图1
DTS、DTC、DTB之间的关系
1.1 DTS和DTSI
.dts文件是一种ASCII文本对Device Tree的描述,放置在内核的/arch/arm/boot/dts目录。一般而言,一个.dts文件对应一个ARM的machine。
由于一个SOC可能有多个不同的电路板,而每个电路板拥有一个 .dts。这些dts势必会存在许多共同部分,为了减少代码的冗余,设备树将这些共同部分提炼保存在.dtsi文件中,供不同的dts共同使用。.dtsi的使用方法,类似于C语言的头文件,在dts文件中需要进行include.dtsi文件。当然,dtsi本身也支持include 另一个dtsi文件。
1.2 DTC
DTC为编译工具,它可以将.dts文件编译成.dtb文件。DTC的源码位于内核的scripts/dtc目录,内核选中CONFIG_OF,编译内核的时候,主机可执行程序DTC就会被编译出来。即scripts/dtc/Makefile中
hostprogs-y := dtc
always := $(hostprogs-y)
This will tell kbuild to build lxdialogeven if not referenced in any rule.
在内核的arch/arm/boot/dts/Makefile中,若选中某种SOC,则与其对应相关的所有dtb文件都将编译出来。在linux下,make dtbs可单独编译dtb。以下截取了qcom平台的一部分。
ifeq ($(CONFIG_OF),y)
…
#used for cleaning - not building
subdir- := qcom
endif
qcom\Makefile
ifeq ($(CONFIG_OF),y)
dtb-$(CONFIG_ARCH_MSM8909) +=msm8909-sim.dtb \
msm8909-rumi.dtb\
msm8909-qrd-skua.dtb\
msm8909-qrd-skuc.dtb\
msm8909-qrd-skue.dtb\
msm8909-cdp.dtb\
msm8909-mtp.dtb\
msm8909-mtp-smb1360.dtb\
msm8909-pm8916-mtp-smb1360.dtb\
msm8909-512mb-mtp-smb1360.dtb\
msm8909-1gb-qrd-skua.dtb\
msm8909-1gb-qrd-skuc.dtb\
msm8909-1gb-qrd-skue.dtb\
msm8909-1gb-cdp.dtb\
msm8909-1gb-mtp.dtb\
<