linux sysfs文件系统(一)概述

简单的说,sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用。

       sysfs可以看成与proc,devfs和devpty同类别的文件系统,该文件系统是虚拟的文件系统,可以更方便对系统设备进行管理。它可以产生一个包含所有系统硬件层次视图,与提供进程和状态信息的proc文件系统十分类似。

       sysfs把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核的数据结构以及它们的属性。sysfs的一个目的就是展示设备驱动模型中各组件的层次关系,其顶级目录包括block,bus,drivers,class,power和firmware等.

       sysfs提供一种机制,使得可以显式的描述内核对象、对象属性及对象间关系。sysfs有两组接口,一组针对内核,用于将设备映射到文件系统中,另一组针对用户程序,用于读取或操作这些设备。下面描述了内核中的sysfs要素及其在用户空间的表现:

sysfs在内核中的组成要素 在用户空间的显示
内核对象(kobject) 目录
对象属性(attribute) 文件
对象关系(relationship) 链接(Symbolic Link)

sysfs核心负责为内核中的内部表示和用户空间的外部呈现建立对应关系

1 内核对象被映射为用户空间的目录;

2 对象属性被映射为用户空间的常规文件

3 对象关系被映射为用户空间的符号链接

sysfs代码在fs/sysfs中,他提供两种构件,也就是两个方面的API,一是内核编程接口,用于向内核其他模块提供构建内部树的API,另一是文件系统接口,使得用户空间可以查看并操作对应的内核对象

构建内核对象,对象属性和对象关系

sysfs内部树中有4种类型的节点:目录节点,链接节点,属性节点和二进制属性节点,分别对应内核对象,对象关系,对象属性,内部树的所有节点都是用sysfs_dirent描述符表示,根保存在全局变量sysfs_root中。

每个目录节点都对应一个kobject结构,而属性节点则会包含attribute结构,没有kobject结构。


linux sysfs文件系统(一)概述_第1张图片

内核对象

数据结构为kobject,在内部用一个目录节点表示,由sysfs文件系统作为目录输出到用户空间,由于是目录节点,他下面将会创建其他的节点(链接节点,属性节点,二进制节点)。表示目录节点的数据结构是sysfs_elem_dir,其children域指向他第一个孩子节点,沿着孩子节点的s_sibling组成一个链表。

 sysfs_dirent

sysfs_dirent是组成sysfs单元的基本数据结构,它是sysfs文件夹或文件在内存中的代表。sysfs_dirent只表示文件类型(文件夹/普通文件/二进制文件/链接文件)及层级关系,其它信息都保存在对应的inode中。我们创建或删除一个sysfs文件或文件夹事实上只是对以sysfs_dirent为节点的树的节点的添加或删除。
 

相互关系
  创建文件即是在kobject对应的目录下增加属性文件。
  创建bin文件即是在kobject对应的目录下增加bin属性文件。
  创建链接是创建一个连接指向对应的kobject创建的目录.
  创建属性组即首先创建一个目录,然后在该目录内依次添加所有属性文件
  并且这些创建都需要在kobject注册之后使用/inlude/linux/sysfs.h中定义的接口函数和kobject进行添加。

引用网友的一个结构图:

linux sysfs文件系统(一)概述_第2张图片

 

 

你可能感兴趣的:(文件系统)