免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 18385 | 回复: 4
打印 上一主题 下一主题

[函数] module_init(x)的理解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-07 16:14 |只看该作者 |倒序浏览
在linux下的驱动函数都有module_init(x)和module_exit(x)在linux内核里都定义成一个宏例如:
#define module_init(x) \
        int init_module(void) __attribute__((alias(#x))); \
        extern inline __init_module_func_t __init_module_inline(void) \
        { return x; }
我的问题是这个宏是怎么理解的?具体的说是经过这个宏定义后函数module_init(x)理解为是int init_module(void) __attribute__((alias(#x)));
还是extern inline __init_module_func_t __init_module_inline(void)
还是{ return x; }
还是其他的理解?
另外我还有一个小问题
驱动函数里每个模块都有函数module_init(x)和module_exit(x)
在代码运行的时候每个模块到底是怎么运行的?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2009-01-07 18:10 |只看该作者
module_init(x),定义一个名叫init_module的函数,这个函数是x的alias,
如果你的程序中直接定义了init_module的函数,且格式正确,那这个宏就不必要用了,同理于exit

下面的文章中介绍了模块的加载过程,可以理解extern一句
这种问题最好去看代码
http://www.bitscn.com/hack/young/200607/29957.html

http://www.linuxforum.net/forum/ ... sb=&o=&vc=1

[ 本帖最后由 r2r4 于 2009-1-8 18:35 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-01-07 21:33 |只看该作者

module_init(x)的理解

谢谢...
我没有看到你说的那个文章的地址啊
能不能再说一次...
谢谢高手

论坛徽章:
0
4 [报告]
发表于 2009-01-08 18:36 |只看该作者
地址补充上了,上次竟然疏忽了地址

insmod.c利用符号来找module的入口函数以及退出时需要调用的函数
所以模块中必须要有名为init_module 和cleanup_module的函数

论坛徽章:
0
5 [报告]
发表于 2009-01-09 10:29 |只看该作者
谢谢高手
我明白了....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP