设备树总结

设备树的概念: 

       设备树(Device Tree:DT)是用来描述设备信息的一种树形结构。设备树文件在linux内核启动的时候传递到内核被内核解析。设备树中每一个设备节点中的信息构成了一个属性链表,如果驱动想要使用这个设备信息,只需要在这个属性链表中获取即可 。

设备树其实是一个文件,这个文件包含很多的节点,这些节点是专用来描述设备的信息,包括CPU的信息,GPIO的信息等。信息里面包括很多的属性。属性中包括各种值 value,这些 value 是传递给内核使用的。内核可以解析出这些文件信息,然后给程序员使用。

 

设备树文件格式

***.dts //设备树的源码文件

***.dtsi //设备树源码文件的补充文件(头文件)

|

|

DTC //设备树编译工具 make dtbs

|

|

***.dtb//设备树的 二进制文件

1.设备树从根节点开始描述:/{};

2.node1和node2是根节点的子节点

3.设备树文件中的注释和c文件中一样

4.设备树中每一句话的结束都要以;结尾

5.设备树中节点的属性是一个个的键值对

如何向内核中添加自己的设备节点?

vi 内核源码顶层目录/arch/arm/boot/dts/stm32mp157a-fsmp1a.dts

   //自定义设备树
    mynode@0x12345678{
    compatible = "hqyj,mynode";
        astring="hello 22111";
    uint  =<0xaabbccdd 0x11223344>;
        binarry=[00 0c 29 7b f9 be];
        mixed ="hello",[11 22],<0x12345678>;
     };

如何在驱动中获取到设备树节点信息?

(1)设备树节点结构体

struct device_node {
    const char *name;   //节点名  mynode
    const char *full_name;//节点全名mynode@0x12345678
    struct property *properties;//设备树节点属性链表头节点地址指针
    struct device_node *parent;//当前节点父节点地址
    struct  device_node *child;//当前节点子节点地址
    struct  device_node *sibling;//兄弟节点地址
    };

(2)属性结构体


struct property {
    char    *name;//键名
    int length;//值的长度
    void    *value;//值
    struct property *next;//指向下一个属性节点的指针
    };

(3)获取设备数节点相关API

struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name);
功能:通过节点名字获取设备树节点信息
参数:
from:当前节点父节点,填写NULL,表示默认从根节点开始查找
name:设备树节点名 "mynode"
返回值: 成功返回目标设备树节点结构体指针,失败返回NULL

struct device_node *of_find_compatible_node(struct device_node *from,
    const char *type, const char *compat);
 功能:根据设备树节点在compatible的值来获取设备树节点西悉尼
 参数:
from:当前节点父节点,填写NULL,表示默认从根节点开始查找
type:设备类型,填NULL
compat:compatible的值
返回值: 成功返回目标设备树节点结构体指针,失败返回NULL

struct device_node *of_find_node_by_path(const char *path)
功能:根据设备树节点路径来获取设备树节点信息
参数:
path:指定的设备树节点路径    "/mynode@0x12345678"
返回值: 成功返回目标设备树节点结构体指针,失败返回NULL

********实现大小端转换的函数************
__u32 __be32_to_cpup(const __be32 *p)
功能:将32数据大端转小端
__be32 __cpu_to_be32p(const __u32 *p)
32位数小端转大端

(4)获取属性结构体相关API

struct property *of_find_property(const struct device_node *np,
                     const char *name,
                     int *lenp);
功能:根据设备节点信息结构体解析出指定键名的属性信息
参数:
np:设备树节点指针
name:键名
lenp:解析到的值的长度
返回值:成功返回目标属性结构体指针,失败返回NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值