我想知道是否有一个 gcc 宏可以告诉我 Linux 内核版本,以便我可以适当地设置变量类型。如果没有,我将如何定义自己的宏来执行此操作?
问问题
38006 次
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
获取当前内核版本的。
也可以看看
于 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_version
。kernel_x_foo_type
等人。是您希望以内核版本为条件的类型。调用代码需要查看kernel_version
并访问相应u.k_x
的u.k_y
、 或u.k_z
数据。
于 2013-05-23T18:38:45.180 回答