当前位置:   article > 正文

Linux驱动加载的几种方式module_platform_driver/module_init/xxx_initcall_linux设备驱动加载

linux设备驱动加载

最常用的module_init其实最终调用的就是xxx_initcall

  1. #define module_init(x) __initcall(x);
  2. #define __initcall(fn) device_initcall(fn)
  3. #define device_initcall(fn) __define_initcall(fn, 6)

而module_platform_driver是module_init的一种封装,linux发展出来的platform_bus而带来的接口。

  1. #define module_platform_driver(__platform_driver) \
  2. module_driver(__platform_driver, platform_driver_register, \
  3. platform_driver_unregister)
  1. #define module_driver(__driver, __register, __unregister, ...) \
  2. static int __init __driver##_init(void) \
  3. { \
  4. return __register(&(__driver) , ##__VA_ARGS__); \
  5. } \
  6. module_init(__driver##_init); \
  7. static void __exit __driver##_exit(void) \
  8. { \
  9. __unregister(&(__driver) , ##__VA_ARGS__); \
  10. } \
  11. module_exit(__driver##_exit);

如果该设备驱动依赖于其他设备的驱动,咱们最好理顺这些设备的加载顺序,不要一股脑的使用module_platform_driver/module_init 这些封装好的接口来加载驱动,因为内核并不清楚各个模块的加载顺序。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/607768
推荐阅读
相关标签
  

闽ICP备14008679号