设备树信息的解析

为什么要用设备树

        如果设备树文件和驱动程序放在一起,每切换一次硬件,就需要重新修改驱动程序,例如更改下载的地址,相对会麻烦,所以渐渐采用驱动程序与设备文件分离的思路,这样硬件更换时,只需重新在内核中解析设备树文件即可。

什么是设备树

        设备树(device tree)是描述硬件信息的一种树形结构,设备树文件在linux内核启动后被内核解析。描述一个硬件设备信息的节点我们叫做设备树节点,一个设备节点内部包含当前硬件的多个不同属性,相同节点不同属性是以链式结构存储。

设备树的文件格式及节点的命名

        DTC是编译设备树的编译工具;

        ***.dts 是设备树源码文件;

        ***.dtsi 是设备树的补充文件或者头文件;

        ***.dtb 是生成设备树的镜像文件;

        设备树从节点开始描述  /{},每条语句结束都以;结尾,节点内的属性都是键值对,节点的命名为设备节点名@描述地址。

在驱动程序中如何获取设备树信息

获取设备树节点信息的相关API

根据设备树节点的名字解析设备树节点

struct device_node *of_find_node_by_name(struct device_node *from,
    const char *name);

根据设备树节点路径解析设备树节点

struct device_node *of_find_node_by_path(const char *path)

根据设备树节点中compatibe键来解析设备树节点

struct device_node *of_find_compatible_node(struct device_node *from,
    const char *type, const char *compat);

关于设备驱动中大小端转换相关API

对于u32需要注意使用__be32_to_cpup大端转小端;对于节点属性,使用节点信息结构体的首地址来获取,太过冗长,所以有对应得解析节点属性API,__be32_to_cpup,获取节点属性结构体首地址;也有一些根据属性值得类型来解析值;例如,of_property_read_u32_index,of_property_read_u32_array,of_property_read_u8_array,of_property_read_string,分别为u32,整型数组,单字节数组,字符串。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值