sysfs

定义

sysfs 是 Linux 内核提供的一个 虚拟文件系统(类似 /proc),挂载在 /sys

作用:

  1. 展示内核对象(kobject)及其属性给用户空间
  2. 提供用户态访问和控制硬件及内核状态的接口
  3. 支持驱动和设备管理、模块信息查看、电源管理等

特点:

  • 虚拟文件系统,不占用实际磁盘空间
  • 每个 kobject 对象在 sysfs 中对应一个目录
  • 属性(attribute)以文件的形式暴露,读写这些文件会触发内核的回调函数

结构

目录 作用
/sys/class/ 按设备类别(class)组织的设备,如 net、gpio、leds 等
/sys/bus/ 按总线类型组织设备,如 pci、usb、platform 等;还包含驱动/设备信息
/sys/devices/ 所有 struct device 对象,按设备树/总线组织,最底层
/sys/module/ 已加载了的内核模块
/sys/block/ 块设备信息,如硬盘、闪存分区
/sys/fs/ 文件系统相关信息
/sys/power/ 电源管理相关信息
/sys/firmware/ 固件信息,设备树、ACPI 等

1.sysfs中的设备应该是已经和驱动匹配上了的,还是只要设备树中有的,这里都会有?

  • 是已经和驱动匹配上了的设备,因为/sys/devices/下的设备本质上是内核中的一个个struct device,而struct device实例是在驱动和设备匹配之后才创建的

kobject

kobject 是内核对象的抽象,管理引用计数、生命周期和属性。

sysfs 是 kobject 的用户态接口:

  • 每个注册到 sysfs 的 kobject 对象在 /sys 下生成一个目录。

  • 属性以 文件的形式暴露:

    1
    2
    /sys/class/net/eth0/operstate   # 读取网络接口状态
    /sys/class/leds/led0/brightness # 控制 LED 亮度

操作属性文件 → 内核通过回调函数处理读写 → 驱动或内核状态改变

参考链接