linux (platform_driver)平台设备驱动常用API函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux (platform_driver)平台设备驱动常用API函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5740字,纯文字阅读大概需要9分钟。
内容图文
Table of Contents
1.2、platform_device_unregister
2.2、platform_driver_ unregister
3.3、platform_get_resource_byname
1、设备层注册、注销函数
1.1、platform_device_register
原型: int platform_device_register(struct platform_device *pdev)
功能:向内核注册一个平台设备
参数: pdev:要注册平台设备结构指针
返回值: 0:注册成功; 负数:注册失败
1.2、platform_device_unregister
原型: void platform_device_unregister(struct platform_device *pdev)
功能:从内核中注销一个平台设备
参数: pdev:要注销平台设备结构指针
返回值: 无
1.3、platform_add_devices
原型:int platform_add_devices(struct platform_device **devs, int num)
功能:一次向内核注册 num 个平台设备
参数: devs 是要注册的平台设备数组
返回值: 0:注册成功; 负数:注册失败
2、驱动层注册注销函数
2.1、platform_driver_register
int platform_driver_register(struct platform_driver *drv)
功能:向内核注册一个平台驱动。 如此时有匹配的平台设备则会引发内核执行平台驱动结构中的 probe 函数
参数: drv:要注册的平台驱动结构指针
返回值: 0:注册成功;负数:注册失败
2.2、platform_driver_ unregister
void platform_driver_ unregister (struct platform_driver *drv)
功能: 从内核中注销一个平台设备驱动,如此时已匹配平台设备,则会引发内核执行平台驱动结构中的
remove 函数
参数: drv:要注册的平台驱动结构指针
3、获取资源函数
3.1、platform_get_resource
原型:
struct resource *platform_get_resource(struct platform_device *dev, unsigned int type, unsigned int num)
功能:
通过探测函数中有设备指针获得设备结构中的指定类型的资源结构地址。 这个函数是在驱动层的探测函数使
用
参数: dev : 设备指针 ,实际就是探测函数参数
type: 资源类型
num:同类资源进行重新编号后的下标编号,和设备层中的资源数组不相同。(要注意这一点)
返回值:设备层资源结构数组中对应的资源结构首地址。 NULL:失败
3.2、platform_get_irq
原型: int platform_get_irq(struct platform_device *dev, unsigned int num)
功能: 通过设备指针获得设备结构中的指定编号的中断资源起始编号
参数:
dev :设备指针 ,实际就是探测函数参数
num:同类资源进行重新编号后的下标编号,和设备层中的资源数组不相同。(要注意这一点)
返回值: >0 :中断资源中的起始编号; -ENXIO:失败
3.3、platform_get_resource_byname
原型:
struct resource *platform_get_resource_byname(struct platform_device *dev,
unsigned int type, const char *name)
功能:通过设备指针获得设备结构中的指定名字指定类型的资源结构内存地址
参数:
dev :设备指针 ,实际就是探测函数参数
name:资源名
返回值:设备层资源结构数组中对应的资源结构首地址。 NULL:失败
3.4、platform_get_irq_byname
原型: int platform_get_irq_byname(struct platform_device *dev, const char *name)
功能:通过设备指针获得设备结构中的指定名字的中断资源起始编号
参数:
dev :设备指针 ,实际就是探测函数参数
name:中断资源名
返回值: >0 :中断资源中的起始编号; -ENXIO:失败
4、申请内存资源函数
4.1、request_region
原型:
#define request_region(start,n,name) __request_region(&ioport_resource, (start), (n), (name), 0)
功能:向内核申请一段 IO 端口(IORESOURCE_IO 类型的)(不常用)
参数:
start:起始地址
n: 连续大小
name:使用者名字,用于内核登记。
返回值:
非 NULL:申请成功的资源结构内存地址 struct resource *
NULL: 所申请的 IO 端口资源已经被别人占用了,申请失败。
4.2、request_mem_region
原型:
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0)
功能:向内核申请一段 IO 内存(IORESOURCE_MEM类型的)
参数:
start:起始地址
n:连续大小
name:使用者名字,用于内核登记。
返回值:
非 NULL:申请成功的资源结构内存地址 struct resource *
NULL: 所申请的 IO 内存资源已经被别人占用了,申请失败。
这个宏在实际编程中使用非常多。
4.3、devm_request_region
原型:
#define devm_request_region(dev,start,n,name) \
__devm_request_region(dev, &ioport_resource, (start), (n), (name))
功能:向内核申请一段 IO 端口(IORESOURCE_IO 类型的) ,功能上和 request_region 相同
参数:
dev:设备指针, struct device *
start:起始地址
n:连续大小
name:使用者名字,用于内核登记。
返回值:
非 NULL:申请成功的资源结构内存地址 struct resource *
NULL: 所申请的 IO 端口资源已经被别人占用了,申请失败。
4.4、devm_request_mem_region
原型:
#define devm_request_mem_region(dev,start,n,name) \
__devm_request_region(dev, &iomem_resource, (start), (n), (name))
功能:向内核申请一段 IO 内存(IORESOURCE_MEM 类型的)(常用来申请IO寄存器)
参数:
dev:设备指针, struct device *
start:起始地址
n:连续大小
name:使用者名字,用于内核登记。
返回值:
非 NULL:申请成功的资源结构内存地址 struct resource *
NULL: 所申请的 IO 内存资源已经被别人占用了,申请失败。
这个宏在实际编程中使用非常多。
5、释放内存资源
5.1、release_region
原型:
#define release_region(start,n) __release_region(&ioport_resource, (start), (n))
功能:释放一段使用 request_region 申请的 Io 端口空间。
参数:start:起始地址
n:连续大小
5.2、release_ mem_region
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
功能:释放一段使用 request_mem_region 申请的 Io 内存空间。
参数:
start:起始地址
n:连续大小
5.3、devm_release_region
__devm_release_region(dev, &ioport_resource, (start), (n))
这个宏和前面 release_region 相同,只是多了一个 dev 设备指针参数,类型为 struct device *
5.4、devm_release_mem_region
#define devm_release_mem_region(dev, start, n) \
__devm_release_region(dev, &iomem_resource, (start), (n))
这个宏和前面 release_mem_region 相同,只是多了一个 dev 设备指针参数,类型为 struct device *
shenlong1356 发布了136 篇原创文章 · 获赞 112 · 访问量 6万+ 私信 关注
内容总结
以上是互联网集市为您收集整理的linux (platform_driver)平台设备驱动常用API函数全部内容,希望文章能够帮你解决linux (platform_driver)平台设备驱动常用API函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。