先看 module_platform_driver 在Linux-4.9.88中的定义。
在文件 Linux-4.9.88\include\linux\platform_device.h 中:
#define module_platform_driver(__platform_driver) \
module_driver(__platform_driver, platform_driver_register, \
platform_driver_unregister)
在文件 Linux-4.9.88\include\linux\device.h 中:
#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 是一个宏,将宏展开后如下所示:
展开前:
module_platform_driver(test);
展开后:
static int __init test_init(void)
{
return platform_driver_register(&(test));
}
module_init(test_init);
static void __exit test_exit(void)
{
platform_driver_unregister(&(test));
}
module_exit(test_exit);;
总结:module_platform_driver( ) 宏 所定义的模块加载和卸载函数只通过platform_driver_register( ) 、platform_driver_unregister( ) 函数进行了 platform_driver 的注册与注销。