内存文件系统——sysfs

sysfs是一个内存虚拟文件系统,提供了一个kobject层次结构的视图。sysfs根目录下包含至少10个目录:

l  block:该目录包含了系统中注册的每个块设备对应的目录。这些目录中包含了块设备的任何分区。

l  bus:该目录提供了系统总线的一个视图。

l  class:该目录包含了按高级功能组织的系统中所有设备的一个视图。

l  dev:该目录是已注册设备结点的一个视图。

l  devices:该目录是系统设备的拓扑视图。它直接映射了内核中的设备层次结构。

l  firmware:该目录包含了低层子系统如ACPIEDDEFI等等系统特定的树。

l  fs:包含了已注册的文件系统的一个视图。

l  kernel:该目录包含了内核配置选项和状态信息。

l  modules:该目录包含了系统加载的模块的一个视图。

l  power:该目录包含了系统范围内的电量管理数据。

sysfs中添加和删除kobjects

初始化一个kobject,并将其导出到sysfs使用如下函数:

int kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...);

一个kobject代表sysfs中的一个目录,如果父指针不为空,则它代表该父kobject对应目录下的一个子目录。struct kobject * kobject_create_and_add(const char *name, struct kobject *parent);该函数是一个辅助函数,它将kobject_create()kobject_add()两个函数操作合为一个函数。

       删除一个kobject对应的sysfs表示是通过函数void kobject_del(struct kobject *kobj);来进行的。

       sysfs中增加文件

       kobject映射为目录,而它的属性则映射为文件。

       默认属性

       struct attribute {

const char *name; /* attribute’s name */

struct module *owner; /* owning module, if any */

mode_t mode; /* permissions */

};

sysfs_ops描述了怎样使用默认属性。

struct sysfs_ops {

/* method invoked on read of a sysfs file */

ssize_t (*show) (struct kobject *kobj,

struct attribute *attr,

char *buffer);

/* method invoked on write of a sysfs file */

ssize_t (*store) (struct kobject *kobj,

struct attribute *attr,

const char *buffer,

size_t size);

};

创建新属性

通常,默认属性已经足够了,然而,有时有些kobject比较特殊,需要提供一些特殊的

数据或功能。内核提供如下接口:

int sysfs_create_file(struct kobject *kobj, const struct attribute *attr);

       当然,也可以创建文件链接,接口如下:

int sysfs_create_link(struct kobject *kobj, struct kobject *target, char *name);

销毁属性

对应于属性创建函数,有两个属性销毁接口:

void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);

void sysfs_remove_link(struct kobject *kobj, char *name);

 

你可能感兴趣的:(struct,File,Module,Class,buffer,permissions)