模块未找到:modprobe

5
我已经编写了一个简单的hello world内核模块,编译并安装在/lib/modules/kernel_version/extra/路径中。
使用insmod命令可以正确加载它,但是使用modprobe命令时会出现错误。
modprobe: FATAL: Module hello_world.ko not found.

我已安装所有先决条件。
以下是用于编译和安装的Makefile:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  modules
make -C /lib/modules/$(shell uname -r)/build  M=$(PWD)  modules_install

请告诉我如何完成此操作。
提前感谢您。
2个回答

10
这是因为modprobe通过读取位于/lib/modules/$(shell uname -r)/下名为modules.dep的文件来插入模块。所以,在编译和安装您的模块后,请确保再次创建此依赖项文件。

以下是如何完成此操作:

  
        
  1. 安装模块后,请检查是否将其复制到/lib/modules/目录下。
  2.     
  3. 如果找到,则进入/lib/modules/$(shell uname -r)/并使用depmod命令创建新模块的依赖关系列表。
  4.   


  

完成此操作后,您将能够在文件/lib/modules/$(shell uname -r)/modules.dep中找到您的模块名称。

完成这些步骤后,您可以使用modprobe插入您的模块。

编辑:

以下是我用来以root权限构建和测试的Makefile

target ?= hello_world
obj-m = $(target).o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules_install

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

同样的错误: 一旦我运行 Makefile,模块已经位于 /lib/modules/$(shell uname -r)/modules.dep 中。 - Usr1
安装 /home/vishal/test/linux_dd/hello_world.ko 无法读取私钥 DEPMOD 3.13.0-24-generic make[1]: 离开目录 `/usr/src/linux-headers-3.13.0-24-generic' - Usr1
1
你在使用 modules_installdepmod 命令时是否使用了 root 权限?如果没有,请使用 sudo 重新尝试。 - Santosh A
抱歉,我没听懂你的意思。请解释一下。 - Usr1
2
尝试使用strace命令与modprobe命令一起使用。当搜索文件时,您应该能够看到它正在尝试访问哪些路径名。 - Gil Hamilton
显示剩余2条评论

4

我曾经也遇到过同样的问题。我的问题是在输入命令时没有去掉扩展名,例如:

modprobe foo.ko

出现了上述错误。但是这个:

modprobe foo

工作正常!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接