免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6805 | 回复: 2

关于modprobe.conf文件的调用 [复制链接]

论坛徽章:
0
发表于 2009-08-25 22:40 |显示全部楼层
有没有哪里可以找到对这个文件调用关系的说明?

======

刚刚开始学习2.6的内核,一下子就没搞明白可加载模块是怎么实现的,知道是用modprobe加载的,就是不知道是什么时候由什么代码调用的。请教别人,从网上查,都没有得到合理的解释。研究了好久,下午用了个笨办法,大概得出了点结论。

modprobe.conf只是个配置文件,可以在里面给模块添加别名,添加参数,这些确实是modprobe程序用的。当modprobe被调用时,它会自动来这个文件(以及modprobe.d目录下的文件)取相关内容。而modprobe程序何时运行则主要由开机脚本决定,如果脚本里没有调用点,根本不会加载到内存中。

例如,我要用bonding模块,它属于网络部分的代码。在modprobe.conf里加上"alias bond0 bonding".....其实它的最终调用点是在network-functions里。我有个环境是从2.4升级上来的,network-functions文件中没有bonding模块的相关内容,所以这个模块死也加不上去。 网上有人问,为什么在modprobe.conf里加了模块的相关内容,启动后模块却不在内存里,估计就是没有添加调用点所致。

这个文件除了脚本之外,应该还有内核启动时的调用,这个是从打印推断的。

哪位兄弟研究过?指点指点?谢谢,^_^。

论坛徽章:
0
发表于 2009-08-26 23:07 |显示全部楼层
我觉得是init启动的时候会执行相关的模块加载。
不通的发行版加载启动脚本不一样。
ubuntu是执行init下S开头的脚本。

详细得看一起linux启动详解

论坛徽章:
0
发表于 2009-08-27 02:39 |显示全部楼层
modprobe.conf定义的是驱动模块的别名,
比如在虚机中的网卡模块的别名是这样定义的alias eth0 pcnet32
你用modprobe -r eth0 或者 modprobe -r pcnet32的效果是一样,都会将内存中pcnet32模块去掉,
你可以将eth0 改名为lan,然后执行modprobe lan,内核会将pcnet32的模块加载到内存中

moprobe的执行顺序是先查看modprobe.conf文件,然后寻找/lib/modules/`uname -r`/ 目录下边的模块,以先找到的为准
详细资料可以参考man modprobe

如果你有模块在modprobe.conf中定义了别名但是在启动之后并没有加载,那么需要重新生成initrd文件,模块的加载是在initrd文件中来执行的,而不是内核的第一个进程init来完成的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP