Linux sysfs 文件系统
在 Linux 中,每个目录都有其存在的目的。 sysfs 目录也是如此。内核使用 sysfs 条目将信息导出到用户域中的进程并获取用户的输入。这些条目遍历文件系统来查找为其注册的显示和存储功能。
sysfs 中的条目可以根据总线类型、对象类型、设备类型、父/子关系等进行排序。符号链接有助于减少冗余。
我们将报道什么?
在本文中,我们将探讨 Linux 中的 sysfs 文件系统。让我们首先概述一下 sysfs。
sysfs 文件系统概述
Sysfs 在 Linux 内核版本 2.6.0 中首次引入。
sysfs是Linux中的虚拟文件系统。这意味着 sysfs 上的文件不驻留在磁盘或任何物理介质上。但是,文件系统的内容存储在内存中。最初,sysfs基于ramfs,被称为ddfs(设备驱动程序文件系统)。
Sysfs 使用虚拟文件将数据发送到用户空间。这些数据包括有关各种内核子系统、硬件设备和相关设备驱动程序的数据。
通常,sysfs挂载在/sys分区上,由系统自动挂载。此外,还可以使用 fstab 文件在启动时手动安装它:
从上一个命令中,我们注意到sysfs安装在/sys上。这是安装 sysfs 的标准位置。
Sysfs层次结构
Sysfs 是文件、文件夹和符号链接的集群。 /sys 内的大多数文件都是只读的。有些文件也是可写的,这有助于修改内核变量。符号链接广泛用于链接整个文件系统树中的条目。
我们建议使用“tree”命令来查看此目录的完整视图。在我们的系统上,“tree”命令总共显示了 9480 个目录和 38635 个文件,这是文件和目录的广泛集合。
在顶层,系统启动时创建了 11 个主要子目录。这些子目录代表了在 sysfs 中注册的主要子系统。在启动时,这些子系统会向 kobject 核心注册。初始化完成后,它们开始查找在相应目录中注册的对象。
/sys 文件系统的文件和子目录
现在让我们看看 /sys 文件系统的一些文件和子目录并讨论它们的基本用途。 /sys 顶层最重要的虚拟子目录是块、总线、管理程序、类、设备、内核、固件、模块和电源。
1. /sys/block:对于系统上发现的每个块设备,它都有一个符号链接和目录。这些符号链接指向 /sys/devices 目录下各自的目录。这里有很多子目录:
这些块设备以青色显示,具有包含有关分区信息的属性。这些子目录的示例有 sda、sdb 等。
2. /sys/bus:总线是处理器和一个或多个设备之间的介质/通道。总线类型的示例包括 PCI、PCMCIA、SCSI 或 USB。对于内核中的每种总线类型,/sys/bus 目录中都有一个子目录。每个这样的子目录还有另外两个子目录:设备和驱动程序。
i) devices:它包含总线上发现的每个设备的 /sys/devices(全局设备树)中条目的符号链接。
ii) driver:它包含总线上加载的每个设备驱动程序的子目录。这些子目录包含用于管理驱动程序参数和符号链接的属性。
3. /sys/class: 类是设备的高级视图。该目录还包含针对系统上注册的每个设备类的多一级子目录。这些类可能是终端、网络设备、声音设备等。这些子目录包含类中每个设备的符号链接。这些符号链接指向 /sys/devices 目录中的条目。
4. /sys/class/net:此目录中的每个符号链接代表真实或虚拟网络设备之一,这些设备在访问进程的网络命名空间中可见目录。每个这样的符号链接都指向 /sys/devices 目录中的条目。
5. /sys/devices: /sys/device目录包含文件系统视图中的整个内核设备树。它包括由向内核注册的总线类型找到的每个物理设备。
6. /sys/firmware:它包含用于管理特定于固件的对象和属性的接口。这里,固件是在系统启动时执行的代码。例如,平台可以是x86 BIOS、OpenFirmware和ia64。以EFI文件夹下有很多文件为例。
示例输出:
config_table esrt fw_vendor runtime systab
efivars fw_platform_size mok-variables runtime-map vars
每个文件都包含一些参数值。
7. /sys/kernel: 此子目录中有许多文件和文件夹,提供有关活动内核的数据。
8. /sys/module:对于加载到内核中的每个模块,此目录中都有一个子目录。这些子目录的命名是基于相应内核的名称。在每个模块目录内,都有一个名为sections的子目录,其中包含有关模块节的属性。许多文件如 coresize、initsize、initstate、srcversion 等。同样,还有许多子目录如 drivers、holder、notes、parameters 等。
9. /sys/power:代表电源子系统,只有两个属性:磁盘和状态。系统进入睡眠/挂起状态的方法是由“磁盘”控制的。 “状态”允许权力进入低权力状态。