找不到模块:modprobe

Usr*_*sr1 2 c linux kernel-module linux-device-driver linux-kernel

我编写了一个简单的hello world内核模块,编译并安装在/lib/modules/kernel_version/extra/路径中.

随着insmod它正确加载,但modprobe我得到一个错误

modprobe: FATAL: Module hello_world.ko not found.
Run Code Online (Sandbox Code Playgroud)

我已经安装了所有必需品.

这是Makefile的编译和安装:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  modules
make -C /lib/modules/$(shell uname -r)/build  M=$(PWD)  modules_install
Run Code Online (Sandbox Code Playgroud)

请告诉我如何完成.

提前致谢.

San*_*h A 7

这是因为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插入模块.

编辑:

下面是Makefile我以前用root权限和测试构建的.

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
Run Code Online (Sandbox Code Playgroud)

  • 尝试将 strace 与 modprobe 命令一起使用。在搜索文件时,您应该能够看到它尝试访问的路径名称。 (2认同)