设备树学习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 运行结果

相关推荐
爱吃苹果的日记本13 分钟前
离散数学第七课
学习·离散数学
迪丽热爱18 分钟前
多媒体应用31-914(计算机硬件与体系结构)
学习
dadaobusi40 分钟前
学习:BPU
学习
ab1237681 小时前
OpenCV 学习笔记
笔记·opencv·学习
磁场转动100万匹2 小时前
Hive 学习第一天:搞懂它是什么,并搭好可用的环境
hive·hadoop·学习
dadaobusi2 小时前
RDMA最新进展
学习
我命由我123452 小时前
金融租赁极简理解
经验分享·学习·职场和发展·金融·求职招聘·职场发展·学习方法
辣知3 小时前
辣知·化智75 道德经带给现代人的智慧
学习
小黄人软件3 小时前
aipy 智能体学习2:源码运行执行轨径主干
学习
JWASX3 小时前
Java 转 go 学习 - dubbo-go(1)
学习·golang