标准答案
比较项 | insmod | modprobe |
---|---|---|
基本功能 | 直接将指定的.ko文件插入内核 | 智能加载模块,自动处理依赖关系 |
依赖处理 | 不处理依赖,需要手动按顺序加载依赖模块 | 自动解析并加载所有依赖模块 |
模块路径 | 需要指定完整路径或当前目录下的模块 | 在标准模块目录(/lib/modules/`uname -r`/)中查找模块 |
配置文件 | 不读取任何配置文件 | 读取/etc/modprobe.d/下的配置文件和modules.dep |
参数传递 | 通过命令行直接传递参数 | 可以从配置文件或命令行传递参数 |
错误处理 | 简单的错误返回 | 更详细的错误信息和日志 |
使用场景 | 开发调试时使用,需要精确控制加载过程 | 生产环境使用,自动化程度高 |
卸载模块 | 对应rmmod | 对应modprobe -r |
关键点:modprobe依赖于depmod生成的modules.dep文件来解析模块依赖关系。在开发新模块时,通常先用insmod测试基本功能,确认无误后再安装到标准位置,用modprobe测试依赖关系。
深入解析
依赖关系处理
modprobe通过读取/lib/modules/`uname -r`/modules.dep文件来获取模块依赖信息。这个文件由depmod命令生成,记录了模块之间的依赖关系。
配置文件系统
modprobe会读取以下位置的配置文件:
- /etc/modprobe.d/*.conf
- /run/modprobe.d/*.conf
- /lib/modprobe.d/*.conf
这些配置文件可以用于:
- 设置模块参数
- 定义模块别名
- 指定黑名单模块
- 覆盖模块选项
实际使用示例
# 使用insmod加载模块(需要处理依赖) insmod /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000/e1000.ko # 使用modprobe加载模块(自动处理依赖) modprobe e1000 # 查看模块依赖 modinfo e1000 | grep depends