haison_linux
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1937回复:8

请教一个驱动加载的问题

楼主#
更多 发布于:2005-04-22 22:05
我用的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 命令却可以看到已经加载的模块。
希望论坛上驱动高手给指点指点,毕竟我感到这个太基础了,我以后
还要做驱动程序,这个都没搞定,我感到有点失望。
我越来越是不懂,明天会吹什么风!为什么有一些人总要在你遗忘的瞬间逼迫你再度想起?
future
驱动牛犊
驱动牛犊
  • 注册日期2001-08-29
  • 最后登录2008-10-08
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-11 11:47
-D__KERNEL__ -DMODULE -I $(LINUX_SRC)/include
勿随我,丈夫一取单于尔!
zqlw0824
驱动牛犊
驱动牛犊
  • 注册日期2005-07-13
  • 最后登录2007-12-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-13 15:47
用dmesg可以看到,应该是 rmmod hello
duck_2008
驱动牛犊
驱动牛犊
  • 注册日期2005-07-15
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-15 11:57
下面是引用future于2005-07-11 11:47发表的:
-D__KERNEL__ -DMODULE -I $(LINUX_SRC)/include

  
谢谢你的回答,我也出现了该问题,我是自己写的makefile文件,结果,我按照你的修改了我的makefile文件,发现还是提示编译的目标文件和内核版本不同,请多指教!~
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-15 13:26
看看书,需要包含很多有关verison的头文件,内核每次作完config都会修改这些头文件,你如果不包括就没有version信息。
lsshao
驱动牛犊
驱动牛犊
  • 注册日期2004-02-03
  • 最后登录2007-10-29
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-17 21:48
你是否使用下面的命令呢?!
echo 8 > /pro/sys/kernel/printk
melodylux
驱动牛犊
驱动牛犊
  • 注册日期2003-07-09
  • 最后登录2010-07-19
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-18 14:49
你gcc编译出来的版本,和你的内核版本不同。
ttfwind
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2009-08-21
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望13点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-07-19 14:39
去看我的blog------------http://blog.csdn.net/ttfwind
nobounded
驱动小牛
驱动小牛
  • 注册日期2003-08-14
  • 最后登录2011-07-07
  • 粉丝0
  • 关注0
  • 积分360分
  • 威望258点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-08-09 10:38
源代码加上#include <linux/module.h>
但是,加载时提醒没有license,加上#include MODULE_LICENSE("GPL");根本就不能编译通过,错误说#include后面必须是“FILENAME”或<FILENAME>
请教ttfwind,你是如何编译通过的?能不能提示一下?
游客

返回顶部