内核源码中版本号详解(KERNEL_VERSION & KERNEL_VERSION)

1、内核源码中版本的定义

VERSION = 2	#主版本号
PATCHLEVEL = 6	#主版本号
SUBLEVEL = 35	#更次的版本号
EXTRAVERSION = .7	#更更次的版本号
NAME = Yokohama

(1)内核的版本信息定义在内核源码顶层Makefile的开头;
(2)内核的版本号是分级的,分为主版本号、次版本号、更次的版本号······,越靠后的版本号代表内核的改变越小;

2、version.h文件

#define LINUX_VERSION_CODE 132643
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

(1)version.h在include/linux/目录下,是自动生成的,具体生成的代码在Makefile中;
(2)LINUX_VERSION_CODE宏表示内核当前版本,KERNEL_VERSION宏是用来构成LINUX_VERSION_CODE宏的;

3、KERNEL_VERSION宏

	#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

(1)KERNEL_VERSION宏是用来构成内核版本号的,其中a是主版本号,b是次版本号,c是更次的版本号;
(2)a对应于Makefile中的VERSION变量,b对应PATCHLEVEL变量,c对应SUBLEVEL变量;

4、KERNEL_VERSION宏和LINUX_VERSION_CODE宏的联系

VERSION = 2	#主版本号
PATCHLEVEL = 6	#主版本号
SUBLEVEL = 35	#更次的版本号

#define LINUX_VERSION_CODE 132643
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

(1)132643换算成16进制刚好是0x20623;
(2)0x20623 = (((2) << 16) + ((6) << 8) + (35));
(3)由上可得LINUX_VERSION_CODE = KERNEL_VERSION(VERSION, PATCHLEVEL, SUBLEVEL);

5、使用举例

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,7,35)
	······
#else
	······
};
#endif

在驱动代码中,因为内核的升级可能驱动中调用的函数接口发生了改变,为了兼容新旧的内核版本,在代码中添加条件编译来控制驱动调用的函数接口;

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值