sysfs文件系是一个处于内存中的虚拟文件系统,它为我们提供了kobject对象层次结构的视图。帮助用户能以一个简单文件系统的方式来观察系统中各种设备的拓扑结构。借助属性对象,kobject可以用导出文件的方式,将内核变量提供给用户读取或写入(可选)。
Sysfs的诀窍是把kobject对象与目录项(directory entries)紧密联系起来,这点是通过kobject对象中的dentry字段实现的。
这部分内容可以参考Linux kernel Devlopment第17章的内容。对象属性为:
/* attribute 结构体- 内核数据映射成sysfs中的文件 */
struct attribute {
char *name; /* 属性名称*/
struct module *owner; /* 所属模块,如果存在*/
mode_t mode; /* 权限*/
};
其中名称字段提供了该属性的名称,最终出现在sysfs中的文件名就是它。owner字段在存在所属模块的情况下指向其所属module结构体。如果一个模块没有该属性,那么该字段为 NULL。mode字段类型为mode_t,它表示了sysfs中该文件的权限。对于只读属性而言,如果是所有人都可读它,那么该字段被设为S_IRUGO;如果只限于所有者可读,则该字段被设置为S_IRUSR。同样对于可写属性,可能会设置该字段为S_IRUGO | S_IWUSR。sysfs中的所有文件和目录的uid与gid标志均为零。