modprobe除了装入制定模块之外还同时装入指定模块所依赖的其他模块。因此,modprobe命令有时候相当于调用多次insmod命令(然而,在从当前目录装入自己的模块时仍然需要使用insmod命令,因为你modprobe只能从标准的已安装模块目录中搜索需要装入的模块。)
他们的区别在于,modprobe会考虑要装载的模块是否引用了一些当前内核不存在的符号。
如果有这类引用,modprobe会在当前模块搜索路径中查找定义了这些符号的其他模块。
如果modprobe找到了这些模块(即要装载的模块所依赖的模块),它会同时将这些模块装载到内核。
如果在这种情况下使用insmod,则该命令会失败,并在系统日志中记录“unresolved symbols(未解析的符号)”消息。
rmmod
可以使用rmmod工具从内核中移除模块。
注意,如果内核认为模块仍然在使用状态(例如,某个程序正在打开由该模块导出的设备文件),或者内核被配置为禁止移除模块,则无法移除该模块。配置内核并使得内核在模块忙的时候仍能“强制”移除模块也是可能的。
lsmod
lsmod程序列出当前装载到内核中的所有模块,还提供了其他一些信息,比如其他模块是不是在使用某个特定模块等。
lsmod通过读取/proc/modules虚拟文件来获得这些信息。有关当前已装载模块的信息也可以通过在sysfs虚拟文件系统的/sys/module下找到。