一、什么是 sysfs?
sysfs 是 Linux 内核为设备模型专门设计的一个虚拟文件系统。它将内核中的设备、总线、驱动程序等对象,以文件和目录的形式展现在用户空间,通常挂载在 /sys 目录下。
重点理解:
- sysfs 并不存储数据,而是实时反映内核设备模型的结构和状态。
- sysfs = “ 把内核设备组织,通过树形文件结构暴露给用户空间! ”
二、sysfs 的作用
- 可见性:你可以非常直观地看到设备、驱动、总线等内核对象的关系。
- 可调试:许多驱动和内核参数都可通过 sysfs 实时查看或者调整(如电源管理、驱动参数等)。
- 统一接口:设备/驱动开发者无须自行实现参数调试接口,直接通过 sysfs 文件即可读写。
三、sysfs 和设备模型的关系
- sysfs 由设备模型自动生成和维护(注册 bus、device、driver 等对象时,内核会自动同步在 sysfs 下生成相应的文件和目录)。
- 用户空间可以通过 sysfs 完成很多查看、调试、控制硬件的操作——例如
- 查看所有的 i2c 设备和对应驱动
- 检查某个设备下暴露的属性(如电源状态、设备信息等)
四、sysfs 的基本目录结构
/sys/bus/:所有总线(bus),如 platform、pci、usb。
/sys/class/:把设备按照功能分类,如 net、block、input、tty 等。
/sys/devices/:物理设备的树状结构,反映了设备的“拓扑”关系。/sys/modules/:已加载的内核模块。
/sys/kernel/:内核本身的参数和信息。
五、sysfs 的一些操作示例
在命令行查看:
bash
ls /sys/class/net # 查看所有网络设备
ls /sys/bus/usb/devices # 查看所有 USB 设备
cat /sys/class/net/end0/address # 查看 end0 网卡的物理地址1
2
3
2
3
有些属性支持写入配置,例如控制板子上的LED亮灭:
bash
# 关闭灯
echo 0 | sudo tee /sys/class/leds/work/brightness
# 点亮灯
echo 1 | sudo tee /sys/class/leds/work/brightness1
2
3
4
5
2
3
4
5
六、小结
- sysfs 是 Linux 内核设备模型向用户空间暴露数据和接口的重要机制
- 通过 sysfs,可以直观、统一、动态地观察及调试硬件设备