在早期的 2.6内核(比如2.6.11),是定义在 include/linux/proc_fs.h 中,比如
extern struct proc_dir_entry proc_root;
extern struct proc_dir_entry *proc_root_fs;
extern struct proc_dir_entry *proc_net;
extern struct proc_dir_entry *proc_net_stat;
extern struct proc_dir_entry *proc_bus;
extern struct proc_dir_entry *proc_root_driver;
extern struct proc_dir_entry *proc_root_kcore;
而这些全局变量的真正定义和初始化,则是在 fs/proc/root.c里,比如:
变量声明
L21 struct proc_dir_entry *proc_net, *proc_net_stat, *proc_bus, *proc_root_fs, *proc_root_driver;
在 void __init proc_root_init(void) 这个函数中,内核创建了proc文件系统的根目录及net,driver等子目录,比如在这个函数中,你可以看到类似于这样的语句,就是用来创建这些目录的
L55 proc_net = proc_mkdir("net", NULL);
L69 proc_root_driver = proc_mkdir("driver", NULL);
但是我看了一下,在最新的内核中 (比如2.6.34),proc fs这个模块改动了不少,已经无法用上面的方法来找到 proc_net 这些全局变量了,不过说实话这些变量意义并不大,毕竟在 proc_mkdir的时候,只要用全路径名就可以了,比如
proc_mkdir("test", proc_net)
其实和
proc_mkdir("net/test", NULL)
没有区别的。
取消
评论