Getting kernel version from linux kernel module at runtime

Bogi picture Bogi · Nov 6, 2011 · Viewed 8.7k times · Source

how can I obtain runtime information about which version of kernel is running from inside linux kernel module code (kernel mode)?

Answer

Dan Aloni picture Dan Aloni · Nov 6, 2011

By convention, Linux kernel module loading mechanism doesn't allow loading modules that were not compiled against the running kernel, so the "running kernel" you are referring to is most likely is already known at kernel module compilation time.

For retrieving the version string constant, older versions require you to include <linux/version.h>, others <linux/utsrelease.h>, and newer ones <generated/utsrelease.h>. If you really want to get more information at run-time, then utsname() function from linux/utsname.h is the most standard run-time interface.

The implementation of the virtual /proc/version procfs node uses utsname()->release.

If you want to condition the code based on kernel version in compile time, you can use a preprocessor block such as:

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16)
...
#else
...
#endif

It allows you to compare against major/minor versions.