当前位置: 技术问答>linux和unix
设备驱动的Hello.ko 的驱动加载问题
来源: 互联网 发布时间:2015-12-03
本文导语: 初学驱动编程,就遇到这个问题,弄了好久没弄好,打击啊!请各位帮忙了! 下面是源程: #include #include int hello_init(void) { printk(KERN_ALERT "Hello , Worldn"); return 0; } void hello_exit(void) { printk(KERN_ALERT "Goodbye , cruel Worl...
初学驱动编程,就遇到这个问题,弄了好久没弄好,打击啊!请各位帮忙了!
下面是源程:
#include
#include
int hello_init(void)
{
printk(KERN_ALERT "Hello , Worldn");
return 0;
}
void hello_exit(void)
{
printk(KERN_ALERT "Goodbye , cruel Worldn");
}
module_init(hello_init);
module_exit(hello_exit);
makefile内容:
obj-m += hello.o
KERNELDIR = /lib/modules/2.6.9-5.ELsmp/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -f hello.ko hello.mod.c hello.mod.o hello.o
显示输出:
[root@webdb01 drv]# make
make -C /lib/modules/2.6.9-5.ELsmp/build M=/home/wlei/drv modules
make[1]: Entering directory `/usr/src/kernels/2.6.9-5.EL-smp-i686'
Building modules, stage 2.
MODPOST
make[1]: Leaving directory `/usr/src/kernels/2.6.9-5.EL-smp-i686'
[root@webdb01 drv]# insmod hello.ko
------------------------------------------------------------
insmod: error inserting 'hello.ko': -1 Invalid module format
------------------------------------------------------------
[root@webdb01 drv]#
下面是源程:
#include
#include
int hello_init(void)
{
printk(KERN_ALERT "Hello , Worldn");
return 0;
}
void hello_exit(void)
{
printk(KERN_ALERT "Goodbye , cruel Worldn");
}
module_init(hello_init);
module_exit(hello_exit);
makefile内容:
obj-m += hello.o
KERNELDIR = /lib/modules/2.6.9-5.ELsmp/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -f hello.ko hello.mod.c hello.mod.o hello.o
显示输出:
[root@webdb01 drv]# make
make -C /lib/modules/2.6.9-5.ELsmp/build M=/home/wlei/drv modules
make[1]: Entering directory `/usr/src/kernels/2.6.9-5.EL-smp-i686'
Building modules, stage 2.
MODPOST
make[1]: Leaving directory `/usr/src/kernels/2.6.9-5.EL-smp-i686'
[root@webdb01 drv]# insmod hello.ko
------------------------------------------------------------
insmod: error inserting 'hello.ko': -1 Invalid module format
------------------------------------------------------------
[root@webdb01 drv]#
|
呵呵,和我以前遇到的问题一样,编译的内核版本和在运行的内核版本不一样,或者直接编译的内核设定为加载内核模块时不检测版本
|
直接到include/linux/version.h
中修改版本信息就可以了
中修改版本信息就可以了
|
可能是你的编译器的问题
先确定你的正运行的内核和你的这个模块是同一个编译器编译的
先确定你的正运行的内核和你的这个模块是同一个编译器编译的
|
make[1]: Entering directory `/usr/src/kernels/2.6.9-5.EL-smp-i686'
为何要进入这个目录呢?
你的kernel不是这个吗?
KERNELDIR = /lib/modules/2.6.9-5.ELsmp/build
为何要进入这个目录呢?
你的kernel不是这个吗?
KERNELDIR = /lib/modules/2.6.9-5.ELsmp/build