1.设备树:设备和树,描述设备树的文件叫做DTS(Device Tree Source),
这个DTS文件采用树形结构描述板级设备,也就是开发板的设备信息,
比如CPU数量、内存基地址、IIC接口上接了哪些设备、SPI接口上接
了哪些设备等等。
2.设备树结构模板:
//1个root节点"/";root节点下面一系列子节点。/ {node1 {a-string-property = "A string";a-string-list-property = "first string", "second string";a-byte-data-property = [0x01 0x23 0x34 0x56];child-node1 {first-child-property;second-child-property = <1>;a-string-property = "hello, world";};child-node2 {};};node2 {an-empty-property;a-cell-property = <1 2 3 4>;child-node1 {};};};......
**3.DTS 、DTB和DTC**3.1设备树源文件扩展名为.dts,DTS是设备源码文件,DTB是将DTS编译以后得到的二进制文件。将.dts编译为.dtb需要用到DTC工具。3.2DTC 工具源码在 Linux 内核的 scripts/dtc 目录下,cripts/dtc/Makefile 文件内容如下:hostprogs := dtcalways := $(hostprogs-y)dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o srcpos.o checks.o util.objstc-objs += dtc-lexer.lex.o dtc-parser.tab.o........
4.DTS语法
4.1 .dtsi头文件
和C语言一样,设备树也支持头文件,设备树的头文件扩展名为.dtsi
以我用的IMX6ULL为例,在imx6ull-alientek-emmc.dts中有以下内容:
#include #include "imx6ull.dtsi"
4.2 设备节点
设备树采用树形结构来描述板子对应的信息,每个设备都是一个节点,
每个节点都通过一些属性信息来描述节点信息。如下:
/ { aliases { can0 = &flexcan1; }; cpus { #address-cells = <1>; #size-cells = <0>; cpu0: cpu@0 { compatible = "arm,cortex-a7"; device_type = "cpu"; reg = <0>; }; };.......
设备树中节点命名格式: node-name@until-address
其中“node-name”是节点名字,为 ASCII 字符串,节点名字应该能够清晰的描述出节点的
功能,比如“uart1”就表示这个节点是 UART1 外设。“unit-address”一般表示设备的地址或寄
存器首地址,如果某个节点没有地址或者寄存器的话“unit-address”可以不要,比如“cpu@0”、“interrupt-controller@00a01000”。