_init关键字不是gcc的, 而是linux内核的。 __init, __initdata等属性标志, 是要把这种属性的代码放入目标文件的.init.text节, 数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本, 来指导ld完成的。 对i386来说, 可以参考arch/i386/kernel/vmlinux.lds.S文件。
对编译成module的代码和数据来说, 当模块加载时, __init属性的函数就被执行;
对静态编入内核的代码和数据来说, 当内核引导时, do_basic_setup()函数调用do_initcalls()函数, 后者负责所有.init节函数的执行。
__init说明这个函数仅在初始化的时候使用,在模块挂载以后,就会把初始化函数扔掉,可以把该函数占用的内存扔掉,
posted on 2007-11-06 18:36
吴剑 阅读(460)
评论(0) 编辑 收藏 引用 所属分类:
我的技术文摘