Linux那些事儿之我是Sysfs(9)sysfs文件系统模型
本站寻求有缘人接手,详细了解请联系站长QQ1493399855
最近Linus炮轰C++,“C++是一种糟糕的(horrible)语言。而且因为有大量不够标准的程序员在使用而使许多真正懂得底层问题,而不会折腾那些白痴‘对象模型’”。牛人就是牛气冲天阿。
在fs/sysfs/下面,除去Makefile和Kconfig,还有6个文件。其中file.c, dir.c, symblink.c分别代表了在sysfs文件系统中当文件类型为普通文件,目录,符号连接时的各自的file operations结构体的实现。mount.c包括了sysfs的初始化函数。sysfs.h就是头文件,里面有函数的原形,并将其extern出去。
sysfs的文件系统的所读写的信息是存放在kobject当中,那么dentry是如何与kobject联系起来的呢?是通过kernfs_node。
sysfs文件系统有自己的dirent结构,dirent = directory entry (目录实体)。sysfs中,每一个dentry对应了一个dirent结构,dentry->d _fsdata是一个void的指针,它指向kernfs_node 结构。
include/linux/kernfs.h
struct kernfs_node {atomic_t count;atomic_t active;
#ifdef CONFIG_DEBUG_LOCK_ALLOCstruct lockdep_map dep_map;
#endif/** Use kernfs_get_parent() and kernfs_name/path() instead of* accessing the following two fields directly. If the node is* never moved to a different parent, it is safe to access the* parent directly.*/struct kernfs_node *parent;const char *name;struct rb_node rb;const void *ns; /* namespace tag */unsigned int hash; /* ns + name hash */union {struct kernfs_elem_dir dir;struct kernfs_elem_symlink symlink;struct kernfs_elem_attr attr;};void *priv;unsigned short flags;umode_t mode;unsigned int ino;struct kernfs_iattrs *iattr;
};
count是引用计数。