阅读:1937回复:8
请教一个驱动加载的问题
我用的Linux环境是redhat 9.0(linux内核是2.4.20-8),我在下面作了个最简单的模块加载试验,可是每次都是提示内核不匹配,应该怎样修改才能在现有的环境下运行呢?下面是我的源程序:
#define __NO__VERSION #define MODULE #include<linux/module.h> #include<linux/config.h> #include<linux/version.h> char kernel_version[]=UTS_RELEASE; static int hello_init(void) { printk(\"<1>Hello,world!\\n\"); return 0; } static void hello_exit(void) { printk(\"Goodbye cruel world!\\n\"); } module_init(hello_init); module_exit(hello_exit); 我的编译命令是(在root用户下) gcc -c hello.c 加载命令是 insmod hello.o 每次的提示是 kernel-module version mismach hello.o was compiles for kernel version 2.4.20 while this kernel is version 2.4.20-8 我用了强制加载命令 insmod -f hello.o 虽然可以加载成功,但是有警告信息,而且也没得到预期的结果, 当用rmmod hello.o命令卸载时,提示说 module hello.o is not loaded 但是用ksyms 命令却可以看到已经加载的模块。 希望论坛上驱动高手给指点指点,毕竟我感到这个太基础了,我以后 还要做驱动程序,这个都没搞定,我感到有点失望。 |
|
|
沙发#
发布于:2005-07-11 11:47
-D__KERNEL__ -DMODULE -I $(LINUX_SRC)/include
|
|
|
板凳#
发布于:2005-07-13 15:47
用dmesg可以看到,应该是 rmmod hello
|
|
地板#
发布于:2005-07-15 11:57
下面是引用future于2005-07-11 11:47发表的: 谢谢你的回答,我也出现了该问题,我是自己写的makefile文件,结果,我按照你的修改了我的makefile文件,发现还是提示编译的目标文件和内核版本不同,请多指教!~ |
|
地下室#
发布于:2005-07-15 13:26
看看书,需要包含很多有关verison的头文件,内核每次作完config都会修改这些头文件,你如果不包括就没有version信息。
|
|
5楼#
发布于:2005-07-17 21:48
你是否使用下面的命令呢?!
echo 8 > /pro/sys/kernel/printk |
|
6楼#
发布于:2005-07-18 14:49
你gcc编译出来的版本,和你的内核版本不同。
|
|
7楼#
发布于:2005-07-19 14:39
去看我的blog------------http://blog.csdn.net/ttfwind
|
|
8楼#
发布于:2005-08-09 10:38
源代码加上#include <linux/module.h>
但是,加载时提醒没有license,加上#include MODULE_LICENSE("GPL");根本就不能编译通过,错误说#include后面必须是“FILENAME”或<FILENAME> 请教ttfwind,你是如何编译通过的?能不能提示一下? |
|