我想知道是否有一个gcc宏会告诉我Linux内核版本,所以我可以适当地设置变量类型。如果没有,我将如何定义我自己的宏呢?
答案 0 :(得分:62)
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
获取当前内核版本的方式。
答案 1 :(得分:1)
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
数据。