我想知道是否有一个gcc宏可以告诉我Linux内核的版本,这样我就可以适当地设置变量类型。如果没有,我该如何定义自己的宏来做这件事呢?
4c8rllxm1#
linux/version.h文件中有一个名为KERNEL_VERSION的宏,它可以让您根据当前安装的linux头文件版本(LINUX_VERSION_CODE)检查所需的版本。例如,要检查当前的Linux头文件是否适用于kernel v2.6.16 或更早版本:
KERNEL_VERSION
LINUX_VERSION_CODE
#include <linux/version.h> #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16) ... #else ... #endif
在运行时获取版本信息的更好方法是使用include/linux/utsname.h中的utsname函数。
utsname
char *my_kernel_version = utsname()->release;
这实际上就是/proc/version获取当前内核版本的方式。
/proc/version
Getting kernel version from linux kernel module at runtime
zujrkrfu2#
gcc不知道这些信息。作为一种替代方法,您可以在运行时轻松地确定大量内核信息。您可以定义运行时类型,如下所示
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数据。
kernel_version
kernel_x_foo_type
u.k_x
u.k_y
u.k_z
wz3gfoph3#
在内核代码的第一个Makefile中,你会发现与版本相关的变量。
VERSION = 4 PATCHLEVEL = 9 SUBLEVEL = 37
3条答案
按热度按时间4c8rllxm1#
linux/version.h文件中有一个名为
KERNEL_VERSION
的宏,它可以让您根据当前安装的linux头文件版本(LINUX_VERSION_CODE
)检查所需的版本。例如,要检查当前的Linux头文件是否适用于kernel v2.6.16 或更早版本:在运行时获取版本信息的更好方法是使用include/linux/utsname.h中的
utsname
函数。这实际上就是
/proc/version
获取当前内核版本的方式。另请参阅
Getting kernel version from linux kernel module at runtime
zujrkrfu2#
gcc
不知道这些信息。作为一种替代方法,您可以在运行时轻松地确定大量内核信息。您可以定义运行时类型,如下所示
并让代码在运行时查看
/proc/version
(或内核运行时环境中的任何需要)并适当地设置kernel_version
。kernel_x_foo_type
等是您希望以内核版本为条件的类型。调用代码需要查看kernel_version
并访问适当的u.k_x
、u.k_y
或u.k_z
数据。wz3gfoph3#
在内核代码的第一个Makefile中,你会发现与版本相关的变量。