Linux系统编程-通过sys子系统控制led
Linux sys 子系统
在 Linux 系统中,“sys 子系统” 通常指以 sysfs 虚拟文件系统 为核心的一套内核子系统。
它是 Linux 设备模型的用户空间接口,主要用于 暴露内核对象(如设备、驱动、内核组件等)的信息、属性及层次关系,并提供用户空间与内核对象的交互通道。
sysfs 最早在 Linux 2.6 内核中引入,如今已成为 Linux 设备管理、内核状态监控的核心组件之一。
1.1 sys 子系统的核心:sysfs 虚拟文件系统
sysfs 的本质是一个 内核态与用户态之间的 “桥梁”,它通过虚拟文件的形式将内核中的对象(如设备、驱动、总线等)及其属性映射到用户空间(挂载点通常为 /sys
)。
用户可通过读写 /sys
下的文件,直接获取内核对象信息或修改其配置(需权限)。
与 proc 文件系统(/proc
)不同,sysfs 更强调 “层次化结构” 和 “对象属性”:
- proc 侧重进程状态、系统全局信息(如
/proc/cpuinfo
); - sysfs 则聚焦于设备、驱动等内核对象的 “结构化信息”(如设备的厂商、状态、配置参数),且数据格式更规范(多为键值对或简单数值)。
1.2 sysfs 的目录结构(/sys 下的核心目录)
/sys
的目录结构严格对应内核设备模型的层次关系,核心目录如下:
目录路径 | 作用说明 |
---|---|
/sys/devices |
最核心目录,存放所有内核识别的 “物理 / 虚拟设备” 的实际对象,按设备拓扑结构(如 PCI 总线、USB 总线)层级组织。 |
/sys/class |
按 “设备功能类型” 分类的设备链接(软链接),如 /sys/class/net (网络设备)、/sys/class/block (块设备)、/sys/class/leds (LED 设备)等,不依赖物理总线,方便用户按功能查找设备。 |
/sys/bus |
按 “总线类型” 分类的设备与驱动(如 /sys/bus/pci 、/sys/bus/usb ),包含 devices (该总线上的设备)和 drivers (该总线的驱动)子目录,体现 “总线 - 设备 - 驱动” 的绑定关系。 |
/sys/drivers |
所有内核驱动程序的目录,每个驱动对应一个子目录,包含其绑定的设备(bind /unbind 文件用于手动绑定 / 解绑设备)。 |
/sys/fs |
内核支持的文件系统相关信息(如 /sys/fs/ext4 存放 ext4 文件系统的配置)。 |
/sys/kernel |
内核核心功能的配置与状态(如 /sys/kernel/debug 用于调试,/sys/kernel/mm 内存管理相关)。 |
/sys/module |
已加载内核模块的信息,每个模块对应一个子目录,包含模块参数、依赖等(如 /sys/module/usbcore 是 USB 核心模块)。 |
/sys/power |
系统电源管理相关配置(如休眠状态、电源模式)。 |
shell 控制 led
示例程序:
1 |
|
系统程序控制 led
示例程序:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cokode' Blog!