C语言 是否有检查Linux内核版本的宏定义?

tvz2xvvm  于 2022-12-11  发布在  Linux
关注(0)|答案(3)|浏览(120)

我想知道是否有一个gcc宏可以告诉我Linux内核的版本,这样我就可以适当地设置变量类型。如果没有,我该如何定义自己的宏来做这件事呢?

4c8rllxm

4c8rllxm1#

linux/version.h文件中有一个名为KERNEL_VERSION的宏,它可以让您根据当前安装的linux头文件版本(LINUX_VERSION_CODE)检查所需的版本。例如,要检查当前的Linux头文件是否适用于kernel 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获取当前内核版本的方式。

另请参阅

Getting kernel version from linux kernel module at runtime

zujrkrfu

zujrkrfu2#

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数据。

wz3gfoph

wz3gfoph3#

在内核代码的第一个Makefile中,你会发现与版本相关的变量。

VERSION = 4
PATCHLEVEL = 9
SUBLEVEL = 37

相关问题