module_platform_driver宏解析

Posted 贺二公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了module_platform_driver宏解析相关的知识,希望对你有一定的参考价值。

原文地址:http://m.blog.csdn.net/article/details?id=51331081


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

/* module_platform_driver() - Helper macro for drivers that don't do 
 * anything special in module init/exit.  This eliminates a lot of 
 * boilerplate.  Each module may only use this macro once, and 
 * calling it replaces module_init() and module_exit() 
 */  
#define module_platform_driver(__platform_driver) \\  
    module_driver(__platform_driver, platform_driver_register, \\  
            platform_driver_unregister)  

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

/** 
 * module_driver() - Helper macro for drivers that don't do anything 
 * special in module init/exit. This eliminates a lot of boilerplate. 
 * Each module may only use this macro once, and calling it replaces 
 * module_init() and module_exit(). 
 * 
 * @__driver: driver name 
 * @__register: register function for this driver type 
 * @__unregister: unregister function for this driver type 
 * @...: Additional arguments to be passed to __register and __unregister. 
 * 
 * Use this macro to construct bus specific macros for registering 
 * drivers, and do not use it on its own. 
 */  
#define module_driver(__driver, __register, __unregister, ...) \\  
static int __init __driver##_init(void) \\  
 \\  
    return __register(&(__driver) , ##__VA_ARGS__); \\  
 \\  
module_init(__driver##_init); \\  
static void __exit __driver##_exit(void) \\  
 \\  
    __unregister(&(__driver) , ##__VA_ARGS__); \\  
 \\  
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_exit(void)

        return platform_driver_unregister(& xxx);

module_exit( xxx_exit);

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

以上是关于module_platform_driver宏解析的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用宏解析javascript(可以应用于任何语言)

pytorch源码解析-动态接口宏

宏编译器错误:当参数名称出现在别处时出现“解析问题”

python 有宏定义,或者枚举么

python 有宏定义,或者枚举么

Linux 内核中 likely 与 unlikely 的宏定义解析