代码之家  ›  专栏  ›  技术社区  ›  minghua

Linux内核WL18xx模块初始化是否生成?

  •  0
  • minghua  · 技术社区  · 6 年前

    我在看这个 drivers/net/wireless/ti/wl18xx 驾驶员模块。

    传统的 module_init() 不在源代码中。但跟踪转储显示 wl18xx_driver_init() 调用,尽管源代码中没有该函数。

    我能看到 WL18xx_驱动程序初始化() main.o 在驱动程序目录中。

    在内核的最新版本中,这些函数/宏是自动生成的吗?怎么做到的?

    1 回复  |  直到 6 年前
        1
  •  2
  •   KamilCuk    6 年前

    wl18xx_driver_init 是生成的 here 随着 module_platform_driver(wl18xx_driver) 宏。 它大致扩展到smth类:

    static int __init wl18xx_driver_init(void) { 
       return platform_driver_register(&(wl18xx_driver)); 
    } 
    static initcall_t __initcall_wl18xx_driver_init6 __used __attribute__((__section__(".initcall" "6" ".init"))) = wl18xx_driver_init; 
    static void __exit wl18xx_driver_exit(void) { 
        platform_driver_unregister(&(wl18xx_driver)); 
    } 
    static exitcall_t __exitcall_wl18xx_driver_exit __exit_call = wl18xx_driver_exit;
    

    module_platform_driver macro module driver macro 是的。

    @最好下次发布一些源代码或链接,这样会更容易。包括内核版本也是一个好主意。