标签:resource struct start region driver dev platform API
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万+ 私信 关注
标签:resource,struct,start,region,driver,dev,platform,API 来源: https://blog.csdn.net/shenlong1356/article/details/104448348
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。