有没有一个宏定义来检查Linux内核版本?

39

我想知道是否有gcc宏可以告诉我Linux内核版本,以便我可以适当设置变量类型。如果没有,我该如何定义自己的宏来实现这一功能?

3个回答

75

linux/version.h文件有一个叫做KERNEL_VERSION的宏,可以让您检查您想要的版本是否与当前安装的Linux头文件版本(LINUX_VERSION_CODE)相符。例如,要检查当前的Linux头文件是否适用于内核v2.6.16或更早版本:

#include <linux/version.h>

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16)
...
#else
...
#endif

运行时获取版本信息的更好方法是使用include/linux/utsname.h中的utsname函数。

char *my_kernel_version = utsname()->release;

这基本上是 /proc/version 获取当前内核版本的方式。

另请参阅

在运行时从Linux内核模块获取内核版本


0
在内核代码的第一个Makefile中,您会找到与版本相关的变量。
VERSION = 4
PATCHLEVEL = 9
SUBLEVEL = 37

0

gcc 不会知道这些信息。作为替代方案,您可以轻松地在运行时确定许多内核信息。

您可以定义您的运行时类型,例如:

struct unified_foo {
     unsigned int kernel_version;
     union {
         kernel_x_foo_type k_x;
         kernel_y_foo_type k_y;
         kernel_z_foo_type k_z;
     } u;
};

在运行时,可以查看/proc/version(或者从内核运行环境中获取所需信息),并相应地设置kernel_versionkernel_x_foo_type等是您希望根据内核版本进行条件判断的类型。调用代码需要查看kernel_version并访问适当的u.k_xu.k_yu.k_z数据。


根据内核版本,我是否有其他方法可以拥有不同的变量类型? - zztops

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接