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

Bog*_*ogi 6 kernel-module linux-kernel kernel-mode

如何从linux内核模块代码(内核模式)中获取有关运行哪个内核版本的运行时信息?

Dan*_*oni 18

按照惯例,Linux内核模块加载机制不允许加载未针对正在运行的内核编译的模块,因此您所指的"运行内核"很可能在内核模块编译时已知.

对于检索版本字符串常量,旧版本要求您包括<linux/version.h>,其他版本<linux/utsrelease.h>和更新版本<generated/utsrelease.h>.如果您真的想在运行时获取更多信息,那么utsname()function from linux/utsname.h是最标准的运行时接口.

虚拟/proc/versionprocfs节点的实现使用utsname()->release.

如果要在编译时基于内核版本来调整代码,可以使用预处理器块,例如:

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16)
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)

它允许您与主要/次要版本进行比较.