在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)