conke 发表于 2003-10-21 15:40:43

module_init()宏有什么作用?

编写内核模块时使用module_init宏与不用该宏而直接只使用init_module()有什么区别?

Dragonfly 发表于 2003-10-21 23:05:19

no big difference.allow u use different names

jjww 发表于 2003-10-23 14:26:06

这两天,我看了一下linux2.6的source,也看到module_init(x)这个宏,当相应模块作为内核的一部分被编译的时候,其展开是:

#define module_init(x)        __initcall(x);

#define __initcall(fn) device_initcall(fn)
#define device_initcall(fn)                __define_initcall("6",fn)
#define __define_initcall(level, fn) \
static initcall_t __initcall_##fn __attribute_used__ \
__attribute__((__section__(".initcall" level ".init"))) = fn
在kernel启动的时候通过do_initcalls函数调用初始化函数x。
系统一共提供了7个级别的init section,包括在__initcall_start到__initcall_end区间里,你可以在arch/i386/kernel/vmlinux.lds.S中找到。
如果module_init相应的模块作为模块动态加载,则和dragonfly说的一样。

Dragonfly 发表于 2003-10-23 20:43:28

answer from jjww is more complete. when compiled to kernel (Y), it will be executed and discard, so this is why u see "free unused memory xxk" when u boot u system.
页: [1]
查看完整版本: module_init()宏有什么作用?