uart401 6160 0 (autoclean) [sb]
sound 56492 0 (autoclean) [sb uart401]
soundcore 2372 5 (autoclean) [sb sound]
这些模块都要加载上来,整个声卡才能工作,而且他们之间是有依赖性关系的。最核心的 soundcore必须首先装入, 最后装入sb。但一般人是不知道其先后顺序的。因此, modprobe 就是用来解决这个问题用的。
通常我们只要
modprobe sb
他就会自动的找出 sb 用到的任何的模块, 将他们一一 的加载进来,故一般使用者就不用去伤脑筋了。
那么内核是怎么知道这些模块间的依赖性关系的呢?原来,在系统启动脚本里有一条'depmod -a'命令,会给系统中的任何可用的模块创建一个依赖关系的列表。而 'modprobe module-name'会使用这个列表,在装入指定的
模块前先装入那些事先装入的模块。假如在这个从属列表中很难找到'module-name'的话,他会给出相应的出错信息。
但若使用 insmod, 他可不会自动完成其他模块的调入。比如说,我们要加入PPP模块,用这个命令:
root/root>insmod ppp
root/root>
假如操作成功,系统出现操作提示符。假如没有成功,可能出现下列信息:
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_init_Rsmp_1ca65fca
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_compress_Rsmp_cfd3a418
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_free_Rsmp_b99033d9
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_toss_Rsmp_a152cec0
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_remember_Rsmp_07972313
/lib/modules/2.2.10/net/ppp.o: unresolved symbol slhc_uncompress_Rsmp_3bb36b01
[root /root]#
这说明,PPP模块没有加载成功,错误提示中的unresolved symbol说明,PPP模块所需要的一些模块还没有载入。错误提示第一行的内容是:slhc_init_Rsmp_1ca65fca ,这是哪个模块?这其中可能需要一些经验来做判断,他是以slhc开头的,就试试slhc吧。
root/root>insmod slhc 一切正常,然后我们再加载PPP模块
root/root>insmod ppp
root/root>
这回没有什么返回信息,说明PPP模块加载成功了。
六、从内存中卸载一个Modules
要卸载一个模块,首先用lsmod看看该模块是否确实已加载上来,然后再做操作。除此之外,在碰到有依赖关系的模块时,从内核中卸载模块的过程和载入的过程恰好相反,他遵循“first in last out“的准则,即在一系列有依赖关系的模块中,必须先卸载最后加载进来的模块,最后卸载最先加载进来的模块。比如:假如要用 rmmod 移除正在使用中的模块(如上例,要卸载slhc, 但仍有PPP模块在使用他)会出现错误提示:Device or resource busy 。所以,在将PPP模块从内存中卸载后,才可能将slhc模块从内存中卸载。
总之,在卸载模块时,对于可能出现的模块间依赖性问题,Linux会给您提示足够的信息,仔细查看这些信息,是能够为您采取相应的操作并最终解决问题提供帮助的。
转from: http://tech.ccidnet.com/pub/article/c302_a243681_p1.html
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




