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都用这一个模块?请问有甚麽解决办法?
...全文
148 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文件吗?
第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.4 分析Linux内核的意义 1.5 Linux内核结构 1.6 Linux内核源代码 1.7 Linux内核源代码分析工具 第二章 Linux运行的硬件基础 2.1 i386的寄存器 2.2 内存地址 2.3 段机制和描述符 2.4 分页机制 2.5 Linux中的分页机制 2.6 Linux中的汇编语言 第三章中断机制 3.1 中断基本知识 3.2中断描述符表的初始化 3.3异常处理 3.4 中断处理 3.5中断的后半部分处理机制 第四章 进程描述 4.1 进程和程序(Process and Program) 4.2 Linux中的进程概述 4.3 task_struct结构描述 4.4 task_struct结构在内存中的存放 4.5 进程组织的方式 4.6 内核线程 4.7 进程的权能 4.8 内核同步 第五章进程调度 5.1 Linux时间系统 5.2 时钟中断 5.3 Linux的调度程序-Schedule( ) 5.4 进程切换 第六章 Linux内存管理 6.1 Linux的内存管理概述 6.2 Linux内存管理的初始化 6.3 内存的分配和回收 6.4 地址映射机制 6.5 请页机制 6.6 交换机制 6.7 缓存和刷新机制 6.8 进程的创建和执行 第七章 进程间通信 7.1 管道 7.2 信号(signal) 7.3 System V 的IPC机制 第八章 虚拟文件系统 8.1 概述 8.2 VFS中的数据结构 8.3 高速缓存 8.4 文件系统的注册、安装与拆卸 8.5 限额机制 8.6 具体文件系统举例 8.7 文件系统的系统调用 8 .8 Linux2.4文件系统的移植问题 第九章 Ext2文件系统 9.1 基本概念 9.2 Ext2的磁盘布局和数据结构 9.3 文件的访问权限和安全 9.4 链接文件 9.5 分配策略 第十章 模块机制 10.1 概述 10.2 实现机制 10.3 模块的装入和卸载 10.4 内核版本 10.5 编写内核模块 第十一章 设备驱动程序 11.1 概述 11.2 设备驱动基础 11.3 块设备驱动程序 11.4 字符设备驱动程序 第十二章 网络 12.1 概述 12.2 网络协议 12.3 套接字(socket) 12.4 套接字缓冲区(sk_buff) 12.5 网络设备接口 第十三章 启动系统 13.1 初始化流程 13.2 初始化的任务 13.3 Linux 的Boot Loarder 13.4 进入操作系统 13.5 main.c中的初始化 13.6 建立init进程 附录: 1 Linux 2.4内核API 2.1 驱动程序的基本函数 2.2 双向循环链表的操作 2.3 基本C库函数 2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备

4,469

社区成员

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

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