insmod module_name.ko

问题描述

写好了hellomod.c和Makefile文件,使用make命令运行Makefile文件,生成模块hellomod.ko,下图可以看到生成了对应的文件。
使用命令insmod hellomod.ko插入模块时,出现如下错误:

【Linux】insmod module_name.ko插入内核模块提示操作不被允许

求解过程

刚开始按照自己的理解,对于“操作不被允许”的错误很大概率是权限问题,所以切换成管理员模式执行命令[直接在命令前加sudo或者使用su进入管理员模式],但是仍然提示错误。

【Linux】insmod module_name.ko插入内核模块提示操作不被允许
然后上网搜索了问题的解决办法,主要问题集中在文件内容有误、权限不足和内核版本不匹配。排除了前两者,但由于指向后者的证明不多,所以一直在网上搜索其他办法,仍然不奏效。后来在同学的帮助下,看到了stackoverflow上的一个帖子
【Linux】insmod module_name.ko插入内核模块提示操作不被允许
use the first answer in this link:
【Linux】insmod module_name.ko插入内核模块提示操作不被允许
这里我使用了它提出的第一个方法,进入电脑的BIOS界面,将Secure Boot选项改成Disabled,然后再输入命令sudo insmod hellomod.ko。修改之后,我仍然没有成功。这时的错误提示变成了:
insmod: ERROR: could not insert module hellomod.ko: Invalid module format

然后我大概知道哪里出问题了,使用dmesg验证了我的想法,编译模块时使用的内核版本与当前运行系统的内核版本不对应!找到问题所在,接下来就很好解决了。

【Linux】insmod module_name.ko插入内核模块提示操作不被允许
这个时候可以进入目录/lib/modules,使用ls查看自己是否有需要的内核版本。再使用uname -r查看当前运行系统的内核版本。这里我的内核版本已经是编译模块时需要的,所以问题解决啦!

【Linux】insmod module_name.ko插入内核模块提示操作不被允许
如果此时内核版本不对应,可以直接在Makefile里把
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)
修改成自己的需要的版本
LINUX_KERNEL_PATH := /usr/src/linux-headers-5.4.0-48-generic

可以看到,hellomod模块成功插入了。
【Linux】insmod module_name.ko插入内核模块提示操作不被允许

总结

上网搜索时,已经将具体问题定位到文件内容、权限和内核版本上,在排除了前两者的前提下,应该往内核版本方向找问题,可能能减少求解问题的时间。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
  • 2021-05-19
  • 2021-07-26
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-29
  • 2021-06-03
  • 2021-08-13
  • 2022-12-23
  • 2021-08-28
  • 2022-12-23
相关资源
相似解决方案