module_platform_driver的作用

转载 2016年08月30日 20:27:49


该函数实际是一个宏,它在include/linux/platform_device.h中定义如下:

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /* module_platform_driver() - Helper macro for drivers that don't do 
  2.  * anything special in module init/exit.  This eliminates a lot of 
  3.  * boilerplate.  Each module may only use this macro once, and 
  4.  * calling it replaces module_init() and module_exit() 
  5.  */  
  6. #define module_platform_driver(__platform_driver) \  
  7.     module_driver(__platform_driver, platform_driver_register, \  
  8.             platform_driver_unregister)  

其中的module_driver在/include/linux/device.h中定义,如下:

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * module_driver() - Helper macro for drivers that don't do anything 
  3.  * special in module init/exit. This eliminates a lot of boilerplate. 
  4.  * Each module may only use this macro once, and calling it replaces 
  5.  * module_init() and module_exit(). 
  6.  * 
  7.  * @__driver: driver name 
  8.  * @__register: register function for this driver type 
  9.  * @__unregister: unregister function for this driver type 
  10.  * @...: Additional arguments to be passed to __register and __unregister. 
  11.  * 
  12.  * Use this macro to construct bus specific macros for registering 
  13.  * drivers, and do not use it on its own. 
  14.  */  
  15. #define module_driver(__driver, __register, __unregister, ...) \  
  16. static int __init __driver##_init(void) \  
  17. { \  
  18.     return __register(&(__driver) , ##__VA_ARGS__); \  
  19. } \  
  20. module_init(__driver##_init); \  
  21. static void __exit __driver##_exit(void) \  
  22. { \  
  23.     __unregister(&(__driver) , ##__VA_ARGS__); \  
  24. } \  
  25. module_exit(__driver##_exit);  
module_platform_driver(xxx);
最终展开后就是如下形式:
static int __init xxx_init(void)
{
        return platform_driver_register(&xxx);
}
module_init(xxx_init);
static void __exit xxx_init(void)
{
        return platform_driver_unregister(&xxx);
}
module_exit(xxx_exit);

由上述定义可知,module_platform_driver()宏的作用就是定义指定名称的平台设备驱动注册函数和平台设备驱动注销函数,并且在函数体内分别通过platform_driver_register()函数和platform_driver_unregister()函数注册和注销该平台设备驱动。

该函数实际是一个宏,它在include/linux/platform_device.h中定义如下:

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /* module_platform_driver() - Helper macro for drivers that don't do 
  2.  * anything special in module init/exit.  This eliminates a lot of 
  3.  * boilerplate.  Each module may only use this macro once, and 
  4.  * calling it replaces module_init() and module_exit() 
  5.  */  
  6. #define module_platform_driver(__platform_driver) \  
  7.     module_driver(__platform_driver, platform_driver_register, \  
  8.             platform_driver_unregister)  

其中的module_driver在/include/linux/device.h中定义,如下:

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * module_driver() - Helper macro for drivers that don't do anything 
  3.  * special in module init/exit. This eliminates a lot of boilerplate. 
  4.  * Each module may only use this macro once, and calling it replaces 
  5.  * module_init() and module_exit(). 
  6.  * 
  7.  * @__driver: driver name 
  8.  * @__register: register function for this driver type 
  9.  * @__unregister: unregister function for this driver type 
  10.  * @...: Additional arguments to be passed to __register and __unregister. 
  11.  * 
  12.  * Use this macro to construct bus specific macros for registering 
  13.  * drivers, and do not use it on its own. 
  14.  */  
  15. #define module_driver(__driver, __register, __unregister, ...) \  
  16. static int __init __driver##_init(void) \  
  17. { \  
  18.     return __register(&(__driver) , ##__VA_ARGS__); \  
  19. } \  
  20. module_init(__driver##_init); \  
  21. static void __exit __driver##_exit(void) \  
  22. { \  
  23.     __unregister(&(__driver) , ##__VA_ARGS__); \  
  24. } \  
  25. module_exit(__driver##_exit);  
module_platform_driver(xxx);
最终展开后就是如下形式:
static int __init xxx_init(void)
{
        return platform_driver_register(&xxx);
}
module_init(xxx_init);
static void __exit xxx_init(void)
{
        return platform_driver_unregister(&xxx);
}
module_exit(xxx_exit);

由上述定义可知,module_platform_driver()宏的作用就是定义指定名称的平台设备驱动注册函数和平台设备驱动注销函数,并且在函数体内分别通过platform_driver_register()函数和platform_driver_unregister()函数注册和注销该平台设备驱动。

Linux驱动:module_platform_driver

该宏是用来定义驱动的入口函数使用方法:include static struct platform_driver power_supply_driver ={ .driver = { ...

【平台设备驱动】中module_platform_driver的定义和使用

该函数实际是一个宏,它在include/linux/platform_device.h中定义如下: [cpp] view plain copy   /* module_platf...
  • jwq2011
  • jwq2011
  • 2017年02月08日 17:21
  • 1030

platform_driver 中的 .remove 是怎么被调用到的

platform_driver_unregister(struct platform_driver *drv) 0>driver_unregister(&drv->driver); void dri...

30、Linux Platform Device and Driver

作者: Dongas 日期: 08-06-27   从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Platform_driver 。 ...
  • mianyy
  • mianyy
  • 2011年08月23日 17:54
  • 417

linux platform driver 机制实现leds设备的内核注册与led灯的点亮

平台:ubantu 12.04LTS 开发板:loongson zigbee 参考代码:1 /1b-linux-3.0-20130104/arch/mips/loongson/ls1x/ls1b-bo...
  • a159203
  • a159203
  • 2014年03月05日 17:52
  • 1063

platform设备与设备driver之间的关系

一个简单的platform设备驱动 硬/软件环境:s3c2440/linux-2.6.36/busybox-1.18.4/arm-linux-gcc 4.4.3 下面是模块的c代码: ...

platform driver and device学习笔记

-v0.1 2014.3.4 *** 以gpio驱动为中心,整理设备模型和设备树, 只是整理了gpio                      驱动的注册过程, gpio的驱动见driver/gpi...

platform_driver平台驱动注册和注销过程(下)

2.      平台驱动卸载过程 平台驱动卸载过程是注册的逆过程,详细信息可参考注册过程进行分析。 2.1 at91_i2c_exit()函数 static void __exit ...
  • sidely
  • sidely
  • 2014年09月29日 10:51
  • 944

Linux Platform Device and Driver .

作者 : YiLi Xie    yili.xie@gmail.com 日期 : 2010-1-13 欢迎转载,请注明出处     从 Linux 2.6 起引入了一套新的驱动管理和注册机制...
  • ayangke
  • ayangke
  • 2011年09月23日 19:27
  • 1127

platform_driver_probe 函数使用解释

platform_driver_probe — register driver for non-hotpluggable device Synopsis int __init_or_modu...
  • ggqhit
  • ggqhit
  • 2017年08月06日 21:19
  • 70
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:module_platform_driver的作用
举报原因:
原因补充:

(最多只允许输入30个字)