使用modprobe插入hello.ko内核模块失败,求排查与解决方法
问题分析与解决方法
你操作里的几个关键错误:
- 错误1:模块放置路径不规范:直接把
hello.ko扔到/lib/modules/4.13.0-31-generic/根目录是不符合Linux模块管理规范的,内核模块通常需要放在该目录下的子目录(比如extra/或misc/),而且modprobe依赖模块数据库定位文件,根目录下的模块如果没被数据库收录,会直接找不到。 - 错误2:modprobe命令带了
.ko后缀:modprobe是通过**模块名(不带后缀)**来加载的,你输入hello.ko会让它尝试查找名为hello.ko的模块,自然会提示找不到。 - 错误3:未更新模块依赖数据库:复制模块后没有执行
depmod命令,这个命令负责扫描所有模块目录,生成modules.dep等映射文件,modprobe正是靠这些文件来定位模块的。
正确的操作步骤:
将模块放到规范子目录:
先在目标目录下创建一个专门存放自定义模块的子目录(如果已有extra目录可直接复用):sudo mkdir -p /lib/modules/4.13.0-31-generic/extra然后把你的
hello.ko复制进去:sudo cp hello.ko /lib/modules/4.13.0-31-generic/extra/更新模块依赖数据库:
执行depmod命令让系统识别新添加的模块:sudo depmod -a这个命令会重新扫描所有模块目录,生成最新的依赖映射文件,确保
modprobe能找到你的模块。用modprobe加载模块:
现在直接使用模块名(不带.ko后缀)加载:sudo modprobe hello验证模块加载状态:
可以通过以下命令确认模块是否成功加载:lsmod | grep hello如果输出中出现
hello相关的条目,说明加载成功。移除模块(可选):
移除时同样使用模块名:sudo modprobe -r hello或者继续使用你熟悉的
rmmod hello命令也可以,两者效果一致。
内容的提问来源于stack exchange,提问作者Khilav




