insmod: error inserting '***.ko': -1 Invalid parameters 解决办法
2014-03-10 18:19
656 查看
本人在CentOS 2.6.36下编写内核模块。
一个模块export中:定义函数int add_integar(int a, int b),然后导出EXPORT_SYMBLE(add_integar);编译通过,加载成功。
一个模块inport中:extern int add_integar(int a, int b), 然后调用add_integar函数。编译通过,但是加载失败!
错误: insmod: error inserting 'inport.ko': -1 Invalid parameters
dmesg: import: no symbol version for add_integar
错误原因: 不明,据说是2.6.36 kernel的bug
解决办法:
1) . 编译export.c , 这时在当前目录下会生成一个 Module.symvers 文件
2). 把1)中生成的Module.symvers 文件copy到import.c的目录下
3). 然后再编译 inport.c 文件
4). 先insmod export.ko, 再ins mod import.ko 就不会出现 insmod: error inserting 'inport.ko': -1 Invalid parameters 这个错误了!!
export.c
export.c 的Makefile
inport.c
inport.c 的Makefile
1)在export.c目录中执行: Make 和 insmod export.ko
2)把1)中生成的 Module.symvers copy 到inport.c目录下
3).在inport.c目录中执行: Make 和 insmod inport.ko
就不会出错了!!!
一个模块export中:定义函数int add_integar(int a, int b),然后导出EXPORT_SYMBLE(add_integar);编译通过,加载成功。
一个模块inport中:extern int add_integar(int a, int b), 然后调用add_integar函数。编译通过,但是加载失败!
错误: insmod: error inserting 'inport.ko': -1 Invalid parameters
dmesg: import: no symbol version for add_integar
错误原因: 不明,据说是2.6.36 kernel的bug
解决办法:
1) . 编译export.c , 这时在当前目录下会生成一个 Module.symvers 文件
2). 把1)中生成的Module.symvers 文件copy到import.c的目录下
3). 然后再编译 inport.c 文件
4). 先insmod export.ko, 再ins mod import.ko 就不会出现 insmod: error inserting 'inport.ko': -1 Invalid parameters 这个错误了!!
export.c
#include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h> int add_integar(int a,int b){ return a+b; } static int __init test_init(void){ printk("export init\n"); return 0; } static void __exit test_exit(void){ printk("export exit\n"); } module_init(test_init); module_exit(test_exit); MODULE_LICENSE("Dual BSD/GPL"); EXPORT_SYMBOL(add_integar);
export.c 的Makefile
ifneq ($(KERNELRELEASE),) obj-m := export.o else PWD := $(shell pwd) KVER := $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: $(MAKE) -C $(KDIR) M=$(PWD) clean endif
inport.c
#include<linux/module.h> #include<linux/moduleparam.h> #include<linux/kernel.h> extern int add_integar(int a,int b); static int __init test_init(void){ printk("add_integar(1,2)=%d\n",add_integar(1,2)); return 0; } static void __exit test_exit(void){ printk("bye!\n"); } module_init(test_init); module_exit(test_exit); MODULE_LICENSE("GPL");
inport.c 的Makefile
ifneq ($(KERNELRELEASE),) obj-m := inport.o else PWD := $(shell pwd) KVER := $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: $(MAKE) -C $(KDIR) M=$(PWD) clean endif
1)在export.c目录中执行: Make 和 insmod export.ko
2)把1)中生成的 Module.symvers copy 到inport.c目录下
3).在inport.c目录中执行: Make 和 insmod inport.ko
就不会出错了!!!
相关文章推荐
- 解决insmod: error inserting 'helloworld.ko': -1 Invalid module format
- 解决insmod: error inserting 'helloworld.ko': -1 Invalid module format
- 解决insmod: error inserting 'hello.ko': -1 Invalid module format
- ubuntu 12.04出现insmod: error inserting 'hello.ko': -1 Device or resource busy的解决办法
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting 'kernel.ko': -1 Inavalid parameters
- insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format
- insmod: error inserting 'simp-blkdev.ko': -1 Invalid module format
- insmod: error inserting 'hello.ko': -1 Invalid module format
- 加载模块是提示“insmod: error inserting 'helloworld.ko': -1 Invalid module format”
- insmod: error inserting 'first_drv.ko': -1 Invalid module format
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists解决方法
- insmod: error inserting 'hello.ko': -1 Invalid module format
- insmod: error inserting './scull.ko': -1 Unknown symbol in module
- insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists(转)