当前位置: 技术问答>linux和unix
hello.ko:invalid module format
来源: 互联网 发布时间:2016-09-07
本文导语: 本帖最后由 piedgogo 于 2010-06-22 14:28:07 编辑 [root@global Character]# gcc -v 使用内建 specs。 目标:i386-redhat-linux 配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=relea...
[root@global Character]# gcc -v
使用内建 specs。
目标:i386-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
线程模型:posix
gcc 版本 4.1.1 20061011 (Red Hat 4.1.1-30)
[root@global Character]# cat /proc/version
Linux version 2.6.18-1.2798.fc6xen (brewbuilder@hs20-bc2-4.build.redhat.com) (gcc version 4.1.1 20061011 (Red Hat 4.1.1-30)) #1 SMP Mon Oct 16 15:11:19 EDT 2006
[root@global 2.6.18-1.2798.fc6xen]# pwd
/lib/modules/2.6.18-1.2798.fc6xen
[root@global 2.6.18-1.2798.fc6xen]# ls -l build
lrwxrwxrwx 1 root root 40 06-22 10:34 build -> /usr/src/kernels/2.6.18-1.2798.fc6-i686/
下面是Makefile
# Makefile2.6
ifneq ($(KERNELRELEASE),)
#kbuild syntax. dependency relationshsip of files and target modules are listed here.
mymodule-objs := hello.o
obj-m := hello.o
else
PWD := $(shell pwd)
KVER ?= $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif
编译没问题,ismod是出现:
[root@global Character]# insmod ./hello.ko
insmod: error inserting './hello.ko': -1 Invalid module format
我实在不知道该怎么搞了,代码里面有包含GPL条款。
|
把代码贴出来看看 。
另外
modinfo hello.ko
看看,版本号跟 uname -a 命令读出来的是否一致?
另外
modinfo hello.ko
看看,版本号跟 uname -a 命令读出来的是否一致?
|
用这个makefile
# Makefile 2.6
obj-m += hello.o
KDIR:=/lib/modules/$(shell uname -r)/build
#PWD=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
# Makefile 2.6
obj-m += hello.o
KDIR:=/lib/modules/$(shell uname -r)/build
#PWD=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
|
驱动的版本和内核版本必须完全一致。。
另外,内核源代码树必须make 过
另外,内核源代码树必须make 过
|
file hello.ko看看。
|
编译驱动用的是运行的内核模块,所以不存在版本不一致问题.
我认为要确认两点:
1.该gcc编译器,是否是编译内核的那个版本,当然如果是安装时字带的,那多办就是了.
2.如果是这样话,你把hello代码贴出来看看,是否代码里面有内核版本过期的函数出现.
我认为要确认两点:
1.该gcc编译器,是否是编译内核的那个版本,当然如果是安装时字带的,那多办就是了.
2.如果是这样话,你把hello代码贴出来看看,是否代码里面有内核版本过期的函数出现.
|
insmod: error inserting './hello.ko': -1 Invalid module format
出现这一句,说明你已经安装了模块了,你可以看看
lsmod | greip hello
另外,linux必须转到控制台模式下才能输出 helloworkld
出现这一句,说明你已经安装了模块了,你可以看看
lsmod | greip hello
另外,linux必须转到控制台模式下才能输出 helloworkld