当我只在c文件中插入任何模块时如何显示内核版本?

我有关于从我的C程序的内核模块显示内核版本的问题。 所以插入后,我可以看到我的内核版本,当我通过dmesg显示日志消息。

所以我简单的C代码如下,请任何人都可以告诉我如何插入后显示内核版本,如果我想在程序中插入“谁”,也是如此。 所以在这里你给我解决scheme如何编程或我需要包括哪些结构,以便我能够显示插入模块后的主机名和内核版本。

程序:

#include<linux/init.h> //for init modules #include<linux/module.h> //for kernel modules #include<linux/kernel.h> //for kernel function MODULE_LICENSE("GPL"); //For giving licence to module MODULE_AUTHOR("RAVI BHUVA"); //For authorization of module static int __init init_hello(void) //for initialation of module this function is used { printk(KERN_INFO "Hello Master. \nYou are currently using linux "); return(0); } static void __exit exit_hello(void) //for exiting from module this function is used { printk(KERN_INFO "Good Bye\n"); } module_init(init_hello); //for initialation of module module_exit(exit_hello); //for exiting from module 

您可以使用UTS_RELEASE变量来打印Linux的版本。 只是打印它。 和广告头文件#include

由宏使用。

 #include<linux/init.h> //for init modules #include<linux/module.h> //for kernel modules #include<linux/kernel.h> //for kernel function #include<generated/utsrelease.h>//For UTS_RELEASE MACRO MODULE_LICENSE("GPL"); //For giving licence to module MODULE_AUTHOR("RAVI BHUVA"); //For authorization of module static int __init init_hello(void) //for initialation of module this function is used { printk(KERN_INFO "Hello Master. \nYou are currently using linux %s\n",UTS_RELEASE);//By using macro here i print version of kernel. return(0); } static void __exit exit_hello(void) //for exiting from module this function is used { printk(KERN_INFO "Good Bye\n"); } module_init(init_hello); //for initialation of module module_exit(exit_hello); //for exiting from module 

通过这种方式,你可以显示内核版本。

上述解决方案将打印你的模块被编译的内核版本。 所以,如果你想要模块打印内核运行的版本,这将工作:

 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/utsname.h> static int __init hello_init(void) { pr_alert("You are currently using Linux %s\n", utsname()->release); return 0; } static void __exit hello_exit(void) { pr_alert("Bye"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL"); 

如果你看看proc文件系统,有一个路径为/proc/version的文件,其中包含一个字符串Linux version 3.2.0-56-generic (buildd@batsu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #86-Ubuntu SMP Wed Oct 23 17:31:43 UTC 2013描述内核运行的版本。 在进一步检查/proc/version.c的内核的源代码,它实际上实现了版本文件的过程中,你会看到这段代码是负责输出字符串:

 static int version_proc_show(struct seq_file *m, void *v) { seq_printf(m, linux_proc_banner, utsname()->sysname, utsname()->release, utsname()->version); return 0; }