码迷,mamicode.com
首页 > 其他好文 > 详细

module_platform_driver宏解析

时间:2016-05-07 09:31:12      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:

 

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

[cpp] view plain copy
 技术分享技术分享
  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
 技术分享技术分享
  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()函数注册和注销该平台设备驱动。

module_platform_driver宏解析

标签:

原文地址:http://blog.csdn.net/richu123/article/details/51331081

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!