设备树学习5--读写实操(TODO)

实现一个驱动读取自己定义的设备树

1 设备树读写接口

头文件

cpp 复制代码
#include <linux/of.h>          //节点、属性基础接口
#include <linux/of_address.h>  //reg物理地址
#include <linux/of_irq.h>      //中断
#include <linux/of_gpio.h>     //GPIO
#include <linux/of_clk.h>      //时钟
#include <linux/of_pinctrl.h>  //引脚配置
#include <linux/of_property.h>

查找/遍历设备节点

接口 功能说明
of_find_node_by_path() 按照设备树全路径查找节点
of_find_node_by_name() 按节点 name 查找
of_find_node_by_type() 按 device‑type 属性查找
of_find_compatible_node() 根据 compatible 匹配节点
of_get_child_by_name() 获取指定名字的子节点
of_next_child_node() 循环遍历所有子节点
of_node_put() 节点引用计数释放(查到节点必须调用)
of_device_is_available() 判断节点 status = "okay" 是否启用

读取节点属性(最常用)

接口 用途
of_property_read_bool(node, "xxx") 布尔属性,存在即返回 true
of_property_read_u8() 读取 uint8 属性
of_property_read_u16() 读取 uint16
of_property_read_u32() 读取单个 32 位整型
of_property_read_u64() 读取 64 位整型
of_property_read_u32_array() 读取 u32 数组
of_property_read_string() 读取字符串属性
of_property_read_string_array() 读取字符串数组
of_property_match_string() 匹配字符串列表索引
of_find_property() 获取 property 原始结构体

reg物理内存地址操作

接口 作用
of_address_to_resource() reg 转为 struct‑resource
of_iomap() 物理地址映射成内核虚拟地址
of_iounmap() 解除地址映射
of_address_in_resource() 检查地址是否落在 reg 区间

中断资源

接口 说明
irq_of_parse_and_map() 解析 interrupts 属性、映射中断号
of_irq_get() 获取节点第 n 个中断
of_irq_to_resource() 中断转为 resource 结构体

phandle引用节点

接口 说明
of_parse_phandle() 解析 phandle,拿到被引用节点
of_parse_phandle_with_args() 解析带参数的 phandle(中断控制器常用)

此外还有一些,就不全部列了。。

2 一个例子

2.1 设备树

2.2 驱动

2.3 运行结果

相关推荐
️学习的小王8 分钟前
AI Agent Skills实战教程:从原理到上手编写SKILL.md
人工智能·深度学习·学习·机器学习
春风解人意43 分钟前
从零开始学习嵌入式P29----线程间的通信
c语言·嵌入式硬件·学习
kmomo..44 分钟前
Linux 进程学习笔记
linux·笔记·学习
白猫不黑1 小时前
运维如何转安全(个人经验篇)
运维·学习·安全·web安全·网络安全·信息安全
kyrie_sakura1 小时前
python学习笔记 7--- 文件(IO)操作
笔记·python·学习
xiaoxiangsiyan1 小时前
网络智能化转型核心模块全解析
运维·服务器·网络·数据库·学习·架构·php
minglie12 小时前
espidf的iic波特律动oled
学习
MartinYeung52 小时前
[论文学习]智能合约不变式防御网络犯罪
网络·学习·智能合约
xx~t2 小时前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
我爱cope2 小时前
【计算机网络 | 网络层10:OSPF 与 BGP:自治系统内部和互联网之间如何路由?】
网络·学习·计算机网络·智能路由器