【问题标题】:Module not found: modprobe未找到模块:modprobe
【发布时间】:2015-01-21 18:53:00
【问题描述】:

我编写了一个简单的 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

请告诉我如何完成。

提前致谢。

【问题讨论】:

    标签: c linux linux-kernel linux-device-driver kernel-module


    【解决方案1】:

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

    这是怎么做的

    1. 安装完你的模块后,检查是否复制到/lib/modules/
    2. 如果找到,则到-> /lib/modules/$(shell uname -r)/ 并使用depmod命令创建依赖列表你的新模块。


    完成此操作后,您将能够在文件 /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 。
    • 安装 /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'
    • 以上是makefile的一些输出sn-p。
    • 您在使用modules_installdepmod时是否使用了root权限?如果没有,请使用sudo 并重试
    • 尝试使用 strace 和 modprobe 命令。您应该能够在搜索文件时看到它尝试访问的路径名。
    【解决方案2】:

    我曾经遇到过同样的问题。我的问题是我在发出命令时没有删除扩展名。即

    modprobe foo.ko
    

    给出上述错误。但是这个:

    modprobe foo
    

    有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2016-12-25
      • 2018-04-15
      • 2020-09-28
      • 2019-09-11
      • 1970-01-01
      相关资源
      最近更新 更多