一. 简介
前面已经完成 从设备树文件读取 Led设备节点信息,Led的 IO初始化工作,最终实现Led灯的打开与关闭。
其中,从设备树文件读取 Led设备节点的属性 reg值,具体读取 (IMX6ULL芯片上)寄存器的地址。然后将读取的寄存器的物理地址转换为虚拟地址,这部分代码的实现,可以通过直接内存映射来实现,具体直接调用 of_iomap()函数即可完成。
二. 读取设备树中设备节点信息的新方法
1. 直接内存映射
of_iomap() 函数用于直接内存映射。of_iomap()函数的头文件为:
#include <linux/of_address.h>
注意: of_iomap()函数获取的 reg属性!!!
前面我们会通过 ioremap() 函数,来完成物理地址到虚拟地址的映射,采用设备树以后,就可以直接通过 of_iomap() 函数来获取内存地址所对应的虚拟地址, 而不需要使用 ioremap() 函数了。
当然了,你也可以使用 ioremap 函数来完成物理地址到虚拟地址的内存映射,只是在采用设备树以后,大部分的驱动都使用 of_iomap 函数了。
of_iomap() 函数本质上也是将 reg 属性中地址信息转换为虚拟地址,如果 reg 属性有多段的话,可以通过 index 参数指定要完成内存映射的是哪一段。
of_iomap 函数原型如下:
void __iomem *of_iomap(struct device_node *np, int index)

本文介绍了如何在Linux系统中,利用设备树(DTS)和of_iomap函数从设备节点获取内存地址,从而实现对LED设备的初始化和控制。作者详细讲解了of_iomap的工作原理以及在驱动程序中的应用实例。
最低0.47元/天 解锁文章
438

被折叠的 条评论
为什么被折叠?



