概念:
设备树(DT)用来描述设备信息的一种树形结构,设备树文件在Linux内核启动的时候传递到内核被内核解析。设备树中每一个设备节点中的信息构成了一个属性链表。
***.dts //设备树的源码文件
****.dtsi // 设备树源码文件的补充文件(头文件)
DTC //设备树编译工具 make dtbs
*****.dtb //设备树的二进制文件
1.设备树的语法实现
1.)设备树从根节点开始描述:/{};
2.)node1和node2是根节点的子节点
3.)设备树文件中的注释和c文件中一样
4.)设备树中每一句话的结束都要以;结尾
5.)设备树中节点的属性是一个个的键值对
2.设备树节点的命名
设备树节点命名规则: <name>[@<unit-address>]
<name>:设备树节点的名字,是一个简单的 ASCII 字符串,长度最多为 31 个字符。通常,节点是根据它所代表的设备类型来命名的。
[@<unit-address>]:如果当前节点描述的设备是一个可寻址设备,可以在@后面写上设备的寻址地址
ex:gpio@50006000 //GPIOE控制器节点命名
3.设备树中属性键值对的格式
属性是简单的键值对,其中值可以为空或包含任意字节流。虽然数据类型未编码到数据结构中,但可以在设备树源文件中表示一些基本数据表示形式。
注意:在设备树中有一些特定意义的键名:
compatible=“厂商名,设备名”//用来描述设备厂商信息
#address-cells =//当前节点的子节点的地址信息用n个u32类型数据描述
#size-cells=//当前节点的子节点的地址大小用n个u32类型数据描述
reg= ,...//描述当前节点对应的设备的地址信息
4.自己编写设备树节点被内核解析
1)
1.vi 内核顶层目录/arch/arm/boot/dts/stm32mp157a-fsmp1a.dts
2.在根节点内部添加如下节点:
3.在内核顶层目录下执行编译设备树命令:make dtbs
4.j将编译生成的dtb文件拷贝到tftpboot目录中
5.打开串口工具,重启内核
6.查看自定义的设备树节点是否被内核解析 在/proc/device-tree/自定义设备树节点名下可以看到以属性名为名的文件