“致命:找不到模块错误”使用modprobe

发布于 2024-09-07 15:17:50 字数 901 浏览 12 评论 0原文

我的 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

I have a problem with modprobe command... I compiled the hello world module and loaded it with insmod, it works fine and when I do lsmod, I can see it in the output list. But when I insert this module using modprobe I am getting a FATAL error:

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

Here is the module code:

#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);

and 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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

愁以何悠 2024-09-14 15:17:50

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

The reason is that modprobe looks into /lib/modules/$(uname -r) for the modules and therefore won't work with local file path. That's one of differences between modprobe and insmod.

[浮城] 2024-09-14 15:17:50

最好的办法是实际使用内核 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

The best thing is to actually use the kernel makefile to install the module:

Here is are snippets to add to your Makefile

around the top add:

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

around the end add:

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

and then you can issue

    sudo make install

this will put it either in /lib/modules/$(uname -r)/extra/

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

and run depmod appropriately

请叫√我孤独 2024-09-14 15:17:50

我认为 /lib/modules/uname -r/modules.dep 和 /lib/modules/uname -r/modules 中应该有 your_module.ko 的条目.dep.bin 使“modprobe your_module”命令正常工作

i think there should be entry of your your_module.ko in /lib/modules/uname -r/modules.dep and in /lib/modules/uname -r/modules.dep.bin for "modprobe your_module" command to work

无所谓啦 2024-09-14 15:17:50

尝试使用 insmod 而不是 modprobe。模组探针
在模块目录 /lib/modules/uname -r 中查找所有模块和其他模块
文件

Try insmod instead of modprobe. Modprobe
looks in the module directory /lib/modules/uname -r for all the modules and other
files

故事与诗 2024-09-14 15:17:50

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

sudo stop networking

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

Ensure that your network is brought down before loading module:

sudo stop networking

It helped me - https://help.ubuntu.com/community/UbuntuBonding

我还不会笑 2024-09-14 15:17:50
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 扩展名)

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)

OR

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

then do modprobe module_name (without .ko extension)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文