36

我想知道是否有一个 gcc 宏可以告诉我 Linux 内核版本,以便我可以适当地设置变量类型。如果没有,我将如何定义自己的宏来执行此操作?

4

2 回答 2

72

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.hutsname中的函数。

char *my_kernel_version = utsname()->release;

这本质上是如何/proc/version获取当前内核版本的。

也可以看看

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

于 2013-05-23T18:55:43.427 回答
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_y、 或u.k_z数据。

于 2013-05-23T18:38:45.180 回答