[图解linux][sysfs文件系统]—通过sysfs清楚了解设备的系统状况

在这里插入图片描述

文章目录

  • 1、不敢高声语,恐惊天上人:sysfs目的
  • 2、窥一斑而知全豹:sysfs目录介绍
  • 3、千丝万缕:sysfs中要素的关系
  • 4、数据观星:sysfs中相关结构体

1、不敢高声语,恐惊天上人:sysfs目的

我们想通过sys下面的目录和文件清楚的了解跑Liunx系统的嵌入式设备的系统状况。
[图解linux][sysfs文件系统]—通过sysfs清楚了解设备的系统状况_第1张图片

2、窥一斑而知全豹:sysfs目录介绍

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

  • 其目录有:
目录 功能
block 系统中发现的每个块设备在该目录下对应一个目录。
bus
bus/某一总线/devices 内核中注册的每条总线在该目录下对应一个目录,例如spii2cusb…等等。
bus/某一总线/drivers 该总线下所有设备在该目录下对应一个目录。
classes 将设备按照功能进行分类
dev 包含blockchar两个文件,内含部分块设备和字符设备符号链接。
devices 包含系统所有设备,并根据设备挂接总线类型组织成层次结构。
firmwares 系统中的固件信息。
fs 描述系统中存在的文件系统。
hypervisor 新版本内核中的空目录。
kernel 系统内核的配置参数。
module 系统中所有模块的信息。
power 系统中电源选项。

3、千丝万缕:sysfs中要素的关系

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

[图解linux][sysfs文件系统]—通过sysfs清楚了解设备的系统状况_第2张图片

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

sys下面的目录和文件反映了整台机器的系统状况。这些目录代表了完全不同的设备类型,这些目录只是给我们提供了如何去看整个设备模型的不同视角。真正的设备信息放在devices子目录下,Linux系统中的所有设备都可以在这个目录里找到。如上图所示,bus下对应驱动和设备,classes下有设备的不同分类,分类下也对应各种设备,实际上它们都是devices目录下设备文件的符号链接。

4、数据观星:sysfs中相关结构体

通过 sysfs可以直接通过 shell命令来完成。sysfs 简化了对设备控制的流程,是通过创建inode 节点改变了文件或者目录操作的函数集。kobjectksetLinux 设备驱动模型中的底层数据结构。kset 结构体中包含了kobject结构体和链表头,所有属于这个 ksetkobject 都连接到链表头。如下图所示,ksetkobject的关系如下:
[图解linux][sysfs文件系统]—通过sysfs清楚了解设备的系统状况_第3张图片

  • kset包含了属于自己的kobjectkset所有的 kobject 都是连接在一起的,第一个 kobject 通过entry连接到 ksetlist链表头,中间的 koject 通过 entry变量相连接,最后一个kobject 也是通过 entrykset 的链表头list相连接的。
  • 所有的 kobject 通过 parent 指针连接到 ksetkobject
  • 因为所有的 kobjectkset 指针都指向包含它的 kset集合,所以很容易找到kset 所属的 kobject 集合
  • kset集合中有一个 kobject结构体指向一个 kobj_type结构体。kobj_type 中定
    义了一组属性和操作属性的方法。kset 中的 kobj_type 的优先级大于 kobject中的 kobj_type的优先级。

你可能感兴趣的:(图解linux内核驱动开发)