linux内核模块开发之内核兼容

因为linux内核变化非常快,每个小版本之间数据结构、接口都有可能发生变化,因此为我们写内核模块的兼容性带来了一些问题,经常在某版本上能正常编译的模块,换另一个模块就编译失败了,这时候我们就需要做内核版本兼容了,解决方法如下:

在内核时面有一个linux/version.h头文件,里面有两个宏LINUX_VERSION_CODE和KERNEL_VERSION,可利用这两个宏来协助完成兼容处理,例子代码如下:

static struct nf_hook_ops mrs_ops_forward = {
     .hook    = mrs_hook_forward,
     .owner   = THIS_MODULE,
     .pf      = PF_INET,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
     .hooknum = NF_INET_FORWARD,
#else
     .hooknum = NF_IP_FORWARD,
#endif
.priority = NF_IP_PRI_FIRST,//NF_IP_PRI_RAW,
};

同时可以嵌套多层#if else以支持更多的内核版本,在实践中出真理去吧。

新浪微博:@安静的发狂者

邮箱:dennis.yu(@)live.cn

QQ:229675152

专注于移动互联网音视频通信领域,欢迎交流;本文为原创,转载请保留版权并联系作者

kamailio/opensips技术交流QQ群:118791050
时间: 2024-12-28 14:11:26

linux内核模块开发之内核兼容的相关文章

linux内核模块开发

一,内核模块功能: 让内核文件(zImage或bzImage)本身并不包含某组件,而是在该 组件需要被使用的时候,动态地添加到正在运行的内核中 二,内核模块安装和卸载加载:insmod (insmod hello.ko)卸载:rmmod (rmmod hello)查看:lsmod加载:modprobe (modprobe hello)modprobe如同insmod,也是加载一个模块到内核.它的不同之处在于它会根据文件/lib/modules/<$version>/modules.dep来查看

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)

linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86可以有4种模式RING0~RING3  RING0特权模式给LINUX内核空间RING3给用户空间linux内核是如何组成的?答:linux内核由SCI(System Call Interface)系统调用接口.PM(Process Management)进程管理.MM(Memory Managem

Linux内核模块开发基础【转】

本文转载自:http://blog.csdn.net/coding__madman/article/details/51298180 1. 什么是内核模块 内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载. 2. 为什么需要内核模块 原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用

linux内核模块开发基础

1. 什么是内核模块 内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载. 2. 为什么需要内核模块 原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用内存过多.然后内核模块就诞生了,可以不用被编译进内核但是可以动态的添加到正在运行的内核中! 3. 如何使用内核模块 1> 安装模块 i

5、Linux内核模块开发

Linux的模块驱动 接下来写个最简单的驱动程序,就像程序语言的hello world程序. 首先是:hello.c的代码: 这是个最简单的驱动程序.就是打印hello的信息.驱动程序和我们的程序语言结果有点不大一样.驱动模块的入口是倒数第二行的module_init()的函数.驱动模块的出口是module_exit()的函数. 3.接着是makfile文件: 这也是一个很简单的Makefile文件了.Obj-m后面跟的是我们的最终目标依赖的文件hello.o.第三行的KDIR是我们编译进的内核

嵌入式Linux驱动开发实战视频教程

嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统)适合人群:高级课时数量:109课时用到技术:嵌入式 Linux涉及项目:驱动开发.看门狗技术.触摸屏.视频采集咨询qq:1840215592 课程介绍:本课程即是针对有兴趣学习嵌入式linux驱动开发又不知道从何处着实开始学习嵌入式linux驱动开发的在校同学以及社会在职人员.本课程采用理论教学与实验相结合的方式,软件与硬件相结合的方式,重点给大家讲解嵌入式linux驱动开发的方法,系统地介绍嵌入式linux驱动开发的

嵌入式Linux驱动开发实战教程

嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统) http://www.ibeifeng.com/goods-475.html 咨询QQ2110053820 课程讲师:韩老师 课程分类:Linux 适合人群:高级 课时数量:109课时 更新程度:完成 用到技术:嵌入式 Linux 涉及项目:驱动开发.看门狗技术.触摸屏.视频采集 课程简介:    嵌入式软件开发无疑是当今最热门的行业,嵌入式软件工程师的薪资比普通的软件工 程师的薪资平均高50%以上.随着智能控制.物

[转载][献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南

[献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南. 前言,Linux/Unix 社区的版块不热闹,新手太多,高手太忙,偶把自己这几年的Linux学习的过程讲讲,希望能给大家有点帮助, 引导初学者学习的方向,少走弯路,事半功倍,同时也是抛砖引玉,请过来人热烈发言. 1. 首先熟悉 Linux  建议在 Windows 上安装 VMware Workstation 6.5.0(以下简称VM), 下载种子在 http://www.verycd.com上找. 安装好 

Linux内核(17) - 高效学习Linux驱动开发

这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很多概念也有反复纠结过怎么解释能够更容易的理解,力求即使对于初学者也可以有很少阻碍的一气读完.同时我也把书中一部分自己的感悟抽出来整理了精华版,share出来.当然水平有限,错漏之处有发现而修订时遗漏的,也有尚没有发现的.这本书