25

我的命令有问题modprobe...我编译了 hello world 模块并加载了它insmod,它工作正常,当我这样做时lsmod,我可以在输出列表中看到它。但是当我使用插入这个模块时,modprobe我得到一个致命错误:

root@okapi:/home/ravi# modprobe ./hello.ko 
FATAL: Module ./hello.ko not found.
root@okapi:/home/ravi#

这是模块代码:

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
        printk(KERN_ALERT "Hello, world\n");
        return 0;
}
static void hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

和 Makefile

obj-m += hello.o

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

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

6 回答 6

28

原因是modprobe查找/lib/modules/$(uname -r)模块,因此不适用于本地文件路径。modprobe这是和之间的区别之一insmod

于 2010-06-29T12:22:26.010 回答
6

最好的办法是实际使用内核 makefile 来安装模块:

这是要添加到您的 Makefile 的片段

在顶部添加:

PWD=$(shell pwd)
VER=$(shell uname -r)
KERNEL_BUILD=/lib/modules/$(VER)/build
# Later if you want to package the module binary you can provide an INSTALL_ROOT
# INSTALL_ROOT=/tmp/install-root

在结尾处添加:

install:
        $(MAKE) -C $(KERNEL_BUILD) M=$(PWD) \
           INSTALL_MOD_PATH=$(INSTALL_ROOT) modules_install

然后你可以发出

    sudo make install

这将把它放在 /lib/modules/$(uname -r)/extra/

或 /lib/modules/$(uname -r)/misc/

并适当地运行 depmod

于 2010-06-29T23:12:29.330 回答
3

uname -r我认为在 /lib/modules/ /modules.dep 和 /lib/modules/ /modules.dep.bin中应该有 your_module.ko 条目,uname -r以便“modprobe your_module”命令起作用

于 2017-12-13T09:31:24.163 回答
2

尝试insmod代替 modprobe。Modprobe 在模块目录 /lib/modules/uname -r中查找所有模块和其他文件

于 2010-06-29T12:19:50.483 回答
0

确保在加载模块之前关闭您的网络:

sudo stop networking

它帮助了我 - https://help.ubuntu.com/community/UbuntuBonding

于 2017-03-16T19:05:25.347 回答
-1
Insert this in your Makefile

 $(MAKE) -C $(KDIR) M=$(PWD) modules_install                      

 it will install the module in the directory /lib/modules/<var>/extra/
 After make , insert module with modprobe module_name (without .ko extension)

或者

After your normal make, you copy module module_name.ko into   directory  /lib/modules/<var>/extra/

然后做 modprobe module_name(不带 .ko 扩展名)

于 2017-02-23T09:24:28.770 回答