linux内核模块问题

sunjing 2003-12-11 02:46:57
我需要修改linux内核的一个模块,我在redhat9.0(kernel 2.4.20-8)下修改并编译,可以使用,但我想把模块拿出来单独编译也成功(用gcc -**),我把模块拷贝到相应目录下并用insmod加载,但失败,提示如下:
printer.o:kernel-module version mismatch
printer.o was compiled for kernel version 2.4.20-8custom
while this kernel is version 2.4.20-8

我还想在redhat7.2--redhat9.0都用这一个模块?请问有甚麽解决办法?
...全文
111 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leotiger 2003-12-24
  • 打赏
  • 举报
回复
In fact,It's a mission impossible. Think about it, the kernel modules before 2.4 are .o files,and the ones for 2.5/2.6 are .ko files. The format has been changed!

Forget about module file format compatibility among kernel versions :-)
leotiger 2003-12-24
  • 打赏
  • 举报
回复
sorry, __NO_VERSION__ has been obsolete since 2.3 kernel, if you are using kernel after 2.4 or later, it's really a tough problem.
It seems linus doesn't want one same kernel module being used among different kernel versions :-(
linux1028 2003-12-20
  • 打赏
  • 举报
回复
知识产权,不容票切
sunjing 2003-12-15
  • 打赏
  • 举报
回复
leotiger :
我试了一下,不行,请问能不能再详细地说一下,多谢()
leotiger 2003-12-13
  • 打赏
  • 举报
回复
fwx325(fwx325)说的没错,linux较新的内核都增加了一个特性叫versioned kernel。在你向内核增加模块(当然实际上是内核的一部分)时,检查version是否匹配。如果你要在不同内核之间保持兼容,那么就在模块源文件内加上:
#undef __NO_VERSION__ //just in case
#define __NO_VERSION__
xjl1980_81 2003-12-12
  • 打赏
  • 举报
回复
-I/usr/src/linux-xxx(内核源代码目录)/include

同意!!
int10 2003-12-12
  • 打赏
  • 举报
回复
gz,我也碰上了这个问题,好烦哦。。
fwx325 2003-12-12
  • 打赏
  • 举报
回复
每个模块都定义了一个叫kernel_version的符号,insmod检查这个符号与当前的内核版本好匹配。可移植的接口:
#define __NO_VERSION__ //don't define kernel_version in module.h

#define <linux/module.h>

#define <linux/version.h>
jian 2003-12-11
  • 打赏
  • 举报
回复
要指定include目录
LinHanLao 2003-12-11
  • 打赏
  • 举报
回复
gcc编译时指定该内核版本的头文件目录

-I/usr/src/linux-xxx(内核源代码目录)/include
compboy1 2003-12-11
  • 打赏
  • 举报
回复
你查看过相应的makefile文件吗?

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧