现在的位置: 首页 > 综合 > 正文

insmod modprobe

2018年05月08日 ⁄ 综合 ⁄ 共 2376字 ⁄ 字号 评论关闭

在Linux中,modprobe和insmod都可以用来加载module,不过现在一般都推荐使用modprobe而不是insmod了。
modprobe和insmod的区别是什么呢?
1.modprobe可以解决load module时的依赖关系,比如load moudleA就必须先load mouduleB之类的,
它是通过/lib/modules/modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题
例如下面的wl.ok依赖于igs.ko和emf.ko,如果用modprobe wl 则系统自动会加载igs.ko && emf.ko

使用insmod的话,如果之前没有加载igs.ko && emf.ko,则会报错

/lib/modules # cat modules.dep | grep 'wl.ko'
/lib/modules/2.6.36.4brcmarm/kernel/drivers/net/wl.ko: /lib/modules/2.6.36.4brcmarm/kernel/drivers/net/igs.ko /lib/modules/2.6.36.4brcmarm/kernel/drivers/net/emf.ko
/lib/modules # ls
2.6.36.4brcmarm  modules.dep
/lib/modules # 

linux设备驱动有两种加载方式insmod和modprobe,下面谈谈它们用法上的区别
1、insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址。写法为:

insmod drv.ko

2. modprobe则可以一次将有依赖关系的驱动全部加载到内核。不加驱动的具体地址,但需要在安装文件系统时是按照make modues_install的方式安装驱动模块的。
驱动被安装在/lib/modules/$(uname -r)/...下。写法为:

modprob drv 

modprobe 和insmod一样都是用来加载内核module的
不过modprobe比较智能,它可以根据module的依赖性来自动为你加载;
而insmod就做不到这点

modprobe默认会去/lib/modules/$(uname -r)/...下面查找module,而insmod只在给它的参数中去找module(默认在当前目录找)。这样,有时insmod也有它的有用之处,举个例子吧
有/root/my-mod.ko这个module,cd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert这个module了,
但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)却提示"FATAL: Module my-mod.ko not found",
这就是因为modprobe是到/lib/modules/`uname -r`/下去找module的,如果没找到就是这样了。

另外如果已经有对应的驱动已经安装好了,再次insmod的话,会提示报错
而modprobe则不会

/lib/modules/2.6.36.4brcmarm/kernel/drivers/net # ls
bonding  ctf.ko   emf.ko   et.ko    igs.ko   mii.ko   tun.ko   usb      wl.ko
/lib/modules/2.6.36.4brcmarm/kernel/drivers/net # insmod wl.ko 
insmod: can't insert 'wl.ko': File exists
/lib/modules/2.6.36.4brcmarm/kernel/drivers/net # modprobe wl
/lib/modules/2.6.36.4brcmarm/kernel/drivers/net # lsmod
Module                  Size  Used by    Tainted: P  
nf_nat_sip              5586  0 
nf_conntrack_sip       16679  1 nf_nat_sip
nf_nat_h323             5137  0 
nf_conntrack_h323      34844  1 nf_nat_h323
nf_nat_rtsp             3400  0 
nf_conntrack_rtsp       4268  1 nf_nat_rtsp
nf_nat_ftp              1314  0 
nf_conntrack_ftp        5131  1 nf_nat_ftp
ip6table_filter          893  0 
ip6table_mangle         1093  0 
jffs2                  94871  1 
zlib_deflate           19990  1 jffs2
nf_nat_pptp             1796  0 
nf_conntrack_pptp       3739  1 nf_nat_pptp
nf_nat_proto_gre        1047  1 nf_nat_pptp
nf_conntrack_proto_gre     3499  1 nf_conntrack_pptp
wl                   3981441  0 
igs                    12935  1 wl
emf                    16346  2 wl,igs
et                     64008  0 
ctf                    17519  0 
/lib/modules/2.6.36.4brcmarm/kernel/drivers/net # rmmod wl
/lib/modules/2.6.36.4brcmarm/kernel/drivers/net # modprobe wl
wl_module_init: passivemode set to 0x0
wl_module_init: txworkq set to 0x1
eth1: Broadcom BCM4360 802.11 Wireless Controller 6.37.14.86 (r456083)
hotplug net INTERFACE=eth1 ACTION=add
eth2: Broadcom BCM4360 802.11 Wireless Controller 6.37.14.86 (r456083)

抱歉!评论已关闭.