我有一个modprobe
命令的问题…我编译hello世界模块,并用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
原因是modprobe
查看/lib/modules/$(uname -r)
,因此不能用本地文件路径。 这是modprobe
和insmod
之间的区别之一。
最好的事情是实际使用内核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
尝试insmod
而不是modprobe。 Modprobe在模块目录/ lib / modules / uname -r
查找所有模块和其他文件
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扩展名)