Linux 内核wl18xx module_init 是否生成?
Linux kernel wl18xx module_init is it generated?
我正在查看这个 drivers/net/wireless/ti/wl18xx
驱动程序模块。
繁体module_init()
不在源代码中。然而,跟踪转储显示调用了 wl18xx_driver_init()
,尽管该函数再次不在源代码中。
我可以在该驱动程序目录中 main.o
的 objdump 中看到 wl18xx_driver_init()
。
是否在最新版本的内核中自动生成了functions/macros?这是怎么做到的?
wl18xx_driver_init
是由here扩展生成的module_platform_driver(wl18xx_driver)
宏。
它大致扩展为:
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 and module driver macro。
@ 下次最好post 一些源码或者链接,这样会方便一些。包括内核版本也是一个好主意。
我正在查看这个 drivers/net/wireless/ti/wl18xx
驱动程序模块。
繁体module_init()
不在源代码中。然而,跟踪转储显示调用了 wl18xx_driver_init()
,尽管该函数再次不在源代码中。
我可以在该驱动程序目录中 main.o
的 objdump 中看到 wl18xx_driver_init()
。
是否在最新版本的内核中自动生成了functions/macros?这是怎么做到的?
wl18xx_driver_init
是由here扩展生成的module_platform_driver(wl18xx_driver)
宏。
它大致扩展为:
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 and module driver macro。
@ 下次最好post 一些源码或者链接,这样会方便一些。包括内核版本也是一个好主意。