ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux (platform_driver)平台设备驱动常用API函数

2020-02-22 19:01:26  阅读:1485  来源: 互联网

标签:resource struct start region driver dev platform API


Table of Contents

1、设备层注册、注销函数

1.1、platform_device_register

1.2、platform_device_unregister

1.3、platform_add_devices

2、驱动层注册注销函数

2.1、platform_driver_register

 2.2、platform_driver_ unregister

3、获取资源函数

3.1、platform_get_resource

3.2、platform_get_irq

3.3、platform_get_resource_byname

3.4、platform_get_irq_byname

4、申请内存资源函数

4.1、request_region

4.2、request_mem_region

 4.3、devm_request_region

 4.4、devm_request_mem_region

5、释放内存资源

5.1、release_region

5.2、release_ mem_region

5.3、devm_release_region

5.4、devm_release_mem_region


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万+ 私信 关注

标签:resource,struct,start,region,driver,dev,platform,API
来源: https://blog.csdn.net/shenlong1356/article/details/104448348

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有