> 文档中心 > linux内核源码分析之sysfs文件系统

linux内核源码分析之sysfs文件系统

目录

sysfs概述

使用 sysfs

sysfs文件目录

实例


sysfs概述

sysfs是一个面向用户空间导出内核对象的文件系统,它不仅提供了察看内核内部数据结构的能力,还可以修改这些数据结构。即用于导出内核对象(kobject)的文件系统。

sysfs数据项来源于内核对象(kobject),而内核对象的层次化组织直接反应了sysfs的目录布局。

sysfs 始终与 kobject 的底层结构紧密相关

与proc区别,新设计的内核机制应该尽量使用 sysfs 机制,而将 proc 保留给纯净的“进程文件系统”

使用 sysfs

只要内核配置中定义了 CONFIG_SYSFS ,sysfs 总是被编译进内核。可通过以下命令挂载它:

    mount -t sysfs sysfs /sys

sysfs文件目录

总线、设备、驱动程序和类是使用kobject机制的主要内核对象,因而占据了sysfs中几乎所有的数据项。查看系统中sys目录

(base) root@ubuntu:/sys# ls -ltotal 0drwxr-xr-x   2 root root 0 Mar 20 02:18 blockdrwxr-xr-x  45 root root 0 Mar 20 02:18 busdrwxr-xr-x  70 root root 0 Mar 20 02:18 classdrwxr-xr-x   4 root root 0 Mar 20 02:18 devdrwxr-xr-x  16 root root 0 Mar 20 02:18 devicesdrwxr-xr-x   5 root root 0 Mar 20 02:18 firmwaredrwxr-xr-x  10 root root 0 Mar 20 02:18 fsdrwxr-xr-x   2 root root 0 Mar 26 00:39 hypervisordrwxr-xr-x  15 root root 0 Mar 20 02:18 kerneldrwxr-xr-x 178 root root 0 Mar 20 02:18 moduledrwxr-xr-x   3 root root 0 Mar 20 02:18 power

  • devices/ 包含了一个设备树的文件系统表示。他直接映射了内部的内核设备树,反映了设备的层次结构。
  • bus/ 包含了内核中各种总线类型的平面目录布局。每个总线目录包含两个子目录:devices/与 drivers/

        devices/ 包含了系统中出现的每个设备的符号链接,他们指向 root/ 下的设备目录。

        drivers/ 包含了每个已为特定总线上的设备而挂载的驱动程序的目录(这里假定驱动没有跨越多个总线类型)。

  • fs/ 包含了一个为文件系统设立的目录。现在每个想要导出属性的文件系统必须在 fs/ 下创建自己的层次结构。
  • dev/ 包含两个子目录: char/ 和 block/。在这两个子目录中,有以: 格式命名的符号链接。这些符号链接指向 sysfs 目录中相应的设备。/sys/dev 提供一个通过一个 stat(2) 操作结果,查找设备 sysfs 接口快捷的方法。

实例(GPIO)

内核驱动向用户提供的接口,以GPIO为例,在用户态直接操作gpio

#导出echo 9 > /sys/class/gpio/export#设置方向echo out > /sys/class/gpio/gpio9/direction#拉高拉低echo 0 > /sys/class/gpio/gpio9/value

 

内核参考学习链接

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂