cat proc/version在内核中是如何实现的?
来源:互联网 发布:matlab三维数组画图 编辑:程序博客网 时间:2024/05/16 08:27
proc/version
平时的时候我们都在用cat /proc/version来获得我们内核的版本号,但是是如何产生的呢?let's see see fs/proc/version.c。
如此简单的文件在内核中很少见,有木有!!Too young to simple, 有木有!
这里看到show,是不是紧张了,现在就看看这些值是哪里赋值的。来看include/linux/utsname.h
在utsname中有一个nsproxy。这个在kernel/nsproxy中定义了uts_ns
看到了所使用的uts_ns了吧,在init/version.c中
所以我们在version_proc_show中看到的utsname中使用了version等等。
言归正传,看看init_uts_ns中的UTS_VERSION的定义,where?
在kernel/include/generated/compile.h中,看到这里去找文件,( ⊙ o ⊙ )啊!,怎么没有你说的??稍等,继续往下看。
在kernel/scripts/mkcompile_h文件中呢,这里都是用脚本来生成的compile.h这个文件。
到了这里呢,所有在proc/version能看到的东西都找到了,所以kernel开放给你了,找找总会找到的。
Have Fun!
平时的时候我们都在用cat /proc/version来获得我们内核的版本号,但是是如何产生的呢?let's see see fs/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;}static int version_proc_open(struct inode *inode, struct file *file){return single_open(file, version_proc_show, NULL);}static const struct file_operations version_proc_fops = {.open= version_proc_open,.read= seq_read,.llseek= seq_lseek,.release= single_release,};static int __init proc_version_init(void){proc_create("version", 0, NULL, &version_proc_fops);return 0;}module_init(proc_version_init);
如此简单的文件在内核中很少见,有木有!!Too young to simple, 有木有!
这里看到show,是不是紧张了,现在就看看这些值是哪里赋值的。来看include/linux/utsname.h
static inline struct new_utsname *utsname(void){return ¤t->nsproxy->uts_ns->name;}
在utsname中有一个nsproxy。这个在kernel/nsproxy中定义了uts_ns
struct nsproxy init_nsproxy = {.count= ATOMIC_INIT(1),.uts_ns= &init_uts_ns,#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC).ipc_ns= &init_ipc_ns,#endif.mnt_ns= NULL,.pid_ns= &init_pid_ns,#ifdef CONFIG_NET.net_ns= &init_net,#endif};
看到了所使用的uts_ns了吧,在init/version.c中
struct uts_namespace init_uts_ns = {.kref = {.refcount= ATOMIC_INIT(2),},.name = {.sysname= UTS_SYSNAME,.nodename= UTS_NODENAME,.release= UTS_RELEASE,.version= UTS_VERSION,.machine= UTS_MACHINE,.domainname= UTS_DOMAINNAME,},};
所以我们在version_proc_show中看到的utsname中使用了version等等。
言归正传,看看init_uts_ns中的UTS_VERSION的定义,where?
在kernel/include/generated/compile.h中,看到这里去找文件,( ⊙ o ⊙ )啊!,怎么没有你说的??稍等,继续往下看。
在kernel/scripts/mkcompile_h文件中呢,这里都是用脚本来生成的compile.h这个文件。
到了这里呢,所有在proc/version能看到的东西都找到了,所以kernel开放给你了,找找总会找到的。
Have Fun!
- cat proc/version在内核中是如何实现的?
- cat proc/version在内核中是如何实现的?
- cat proc/version在内核中是如何实现的?
- cat proc/version在内核中是如何实现的?
- Linux中命令cat /proc/meminfo读出的内核信息进行解释
- 在内核中通过/proc/kallsyms获得符号的地址
- 在内核中通过/proc/kallsyms获得符号的地址
- 在内核中通过/proc/kallsyms获得符号的地址
- 在proc*c中如何提高oracle游标的效率
- 内核里面writel是如何实现的
- 内核里面writel是如何实现的
- 在java中,字符串的加法是如何实现的
- 在ASP.net中是如何实现注销功能的?
- 虚函数在C++中是如何实现的
- talking tom cat 如何实现的
- PHP内核中是如何实现 empty, isset 这些函数的?
- Linux系统中,有两个文件file1和file2,每个文件的每一行都是#UUID,其中的每一UUID表示一个号。要找出在file1中有而在file2中没有的UUID,使用cat,sort,uniq三个命令如何实现
- 由 cat /proc/iomem 所学到的
- oracle 自治事物
- ms sqlserver 技巧
- SSL工作原理
- eclispe 插件之反编译插件
- word 2007 删除表格内容
- cat proc/version在内核中是如何实现的?
- SSH如何防破解
- wpf,silverlight,wp7,winform等学习资料整合(一)
- 图片截取
- Ubuntu调节音量图标消失
- ubuntu安装软件
- 在BlackBerry上使用OpenGL绘图(三):OpenGL样例结构分析
- 简单概率DP(POJ 2151 Check the difficulty of problems)
- SICP Exercise 4.8