免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1396 | 回复: 6
打印 上一主题 下一主题

编译Linux device driver的源代码,insmod 提示错误.怎么办? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-09 13:45 |只看该作者 |倒序浏览
[root@localhost short]# insmod short.ko
insmod: error inserting 'short.ko': -1 Invalid module format


什么原因,,,??????????????????????/

论坛徽章:
0
2 [报告]
发表于 2005-12-09 13:46 |只看该作者
是ldd3,在Fedra 3上使用的.

论坛徽章:
0
3 [报告]
发表于 2005-12-09 21:52 |只看该作者
I'm using fc3, and compile the scull.ko module which works well.

论坛徽章:
0
4 [报告]
发表于 2005-12-09 22:03 |只看该作者
[k@korg short]$ uname -a
Linux korg.korg.com 2.6.9-1.667 #1 Tue Nov 2 14:41:25 EST 2004 i686 i686 i386 GNU/Linux
[k@korg short]$ sudo insmod short.ko
[k@korg short]$ lsmod
Module                  Size  Used by
short                  15500  0
nvram                  12105  1
...

是不是你的包没装全?

论坛徽章:
0
5 [报告]
发表于 2005-12-12 19:26 |只看该作者

我不知道是否是这个原因?

我不知道是否是这个原因?
在2.4系列内核和2.6系列内核中,编译内核模块的方法不同。在2.6内核中如果使用2.4中用gcc直接来编译就会出现这个问题。
在2.6内核中应该编写Makefile文件来编译。具体的给你一个模板吧:
ifneq ($(KERNELRELEASE),)
        obj-m:=mylist.o
else
        KERNELDIR ?=/lib/modules/$(shell uname -r)/build
        PWD:=$(shell pwd)
default:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
        rm -f *.o
        rm -f *.ko

只要将其中的mylist.o 修改为你相应的名字就可以了。例如对于test.c,则应该为test.o
使用make编译成功后,可以使用insmod test.ko来加载模块。
就唠叨这么多了,希望交个朋友,共同进步。
好运

论坛徽章:
5
6 [报告]
发表于 2005-12-13 12:35 |只看该作者
$ uname -r
$ modinfo --format %{kernel_version} short.ko

如果两者的输出结果不一样,说明short.ko没有做对

论坛徽章:
0
7 [报告]
发表于 2005-12-13 17:45 |只看该作者
我编译的时候用的kernel源代码版本高于现在运行的操作系统kernel版本,,,,所以出现了问题,,,,
下载了一个底版本的就好了,,,感谢各位的支持....

多多交流!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP