赞
踩
最常用的module_init其实最终调用的就是xxx_initcall
- #define module_init(x) __initcall(x);
- #define __initcall(fn) device_initcall(fn)
- #define device_initcall(fn) __define_initcall(fn, 6)
而module_platform_driver是module_init的一种封装,linux发展出来的platform_bus而带来的接口。
- #define module_platform_driver(__platform_driver) \
- module_driver(__platform_driver, platform_driver_register, \
- platform_driver_unregister)
- #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_init 这些封装好的接口来加载驱动,因为内核并不清楚各个模块的加载顺序。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。