LINUX_VERSION_CODE与KERNEL_VERSION

由于Linux版本的在不断更新,当设备驱动去兼容不同版本的内核时,需要知道当前使用的内核源码版本,以此来调用对应版本的内核API,这两个宏定义在文件

/usr/include/linux/version.h

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

安装完linux-header之后,在下面这个目录找到了version.h这个文件

/usr/lib/modules/4.4.45-1-MANJARO/build/include/generated/uapi/linux/version.h

使用的Linux系统为MANJARO,内核版本号为4.4.45,对应的LINUX_VERRSION_CODE 为263213,计算方法如下:

首先将4.4.45 转为16进制为 0x04.0x04.0x2D
然后宏 KERNEL_VERSION(0x04,0x04,0x2D)展开之后得到04042D 这个16进制的数字
最后将0x040423 转化为十进制就得到了十进制的263213 即为 LINUX_VERSION_CODE的值263213

可以利用下面的代码根据linux内核版本号的不同调用不同的API函数:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
....//3.10.0 之前的API调用
#else 
....//3.10.0 版本之后的API调用
#endif 

猜你喜欢

转载自blog.csdn.net/sun172270102/article/details/107166784