【module_platform_driver】宏解析

转自:https://blog.csdn.net/richu123/article/details/51331081

该函数实际是一个宏,它在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()函数注册和注销该平台设备驱动。

猜你喜欢

转载自blog.csdn.net/feifei_csdn/article/details/80881039