1、设备树
设备树描述硬件信息的一种树形结构,设备树文件在linux内核启动后被内核解析。
描述一个硬件设备信息的节点我们叫做设备节点,一个设备节点内部包含当前硬件的多个不同属性,相同节点不同属性是以链式结构存储
2、设备树的文件格式
内核顶层目录下/arch/arm/boot/dts:设备树文件存放路径
单独编译设备树文件:make dtbs
***.dts//设备树源码文件
***.dtsi //设备树的补充文件或者头文件
***.dtb //编译后设备树的镜像文件
3、设备树的语法实现
设备树是节点和属性的简单树结构。属性是键值对,节点可以同时包含属性和子节点。
4、解析设备树节点
1)根据设备树节点的名字解析设备树节点:
struct device_node *of_find_node_by_name(struct device_node *from/*当前节点父节点首地址(不知道就填NULL,默认从设备树根节点开始解析)*/,const char *name/*设备树节点名字*/);
返回值:成功获取到解析的设备树节点信息结构体首地址,失败返回NULL
2)根据设备树节点路径解析设备树节点:
struct device_node *of_find_node_by_path(const char *path/*设备树节点路径 */)
返回值:成功获取到解析的设备树节点信息结构体首地址,失败返回NULL
3)根据设备树节点中compatibe键来解析设备树节点:
struct device_node *of_find_compatible_node(struct device_node *from/*填NULL,默认从根节点开始解析*/,const char *type/*NULL*/, const char *compat/*填写要解析的设备树节点中compatible的值*/);
返回值:成功获取到解析的设备树节点信息结构体首地址,失败返回NULL
4)基于解析后的设备树节点信息结构体解析指定属性键值对:
struct property *of_find_property(const struct device_node *np/*设备树节点信息结构体指针*/,const char *name/*指定的键名*/,int *lenp/*获取到的字节个数*/)
返回值:成功返回属性结构体首地址,失败返回NULL