S5P6818_系统篇(9)kernel基础 sys/proc接口
目录
内核虚拟文件系统接口
sysfs
block
bus
class
dev
devices
firmware
fs
hypervisor
kernel
module
power
proc
内核虚拟文件系统接口
sysfs
在 Linux 内核中,/sys 目录是一个虚拟文件系统,称为 sysfs,它提供了内核内部信息和设备配置的访问接口。
block
/sys/block 目录专门用于显示块设备(block devices)的信息,这些设备通常指的是磁盘、固态硬盘、分区以及其他存储设备。
/sys/block 目录的作用
显示块设备信息: /sys/block 目录下每个子目录对应一个块设备(如硬盘、SSD、分区等)。这些设备以设备名称(如 sda, sdb 等)作为子目录名。例如,/sys/block/sda 对应 /dev/sda 设备。
访问设备的属性和状态: 每个设备目录下包含多个文件,用户可以通过读取或写入这些文件来获取设备的状态或修改某些属性。常见的文件包括:
size:设备的总大小(单位为 512 字节的块数)。
ro:只读标志,显示设备是否是只读的。
removable:显示设备是否是可移动的(如 USB 驱动器)。
queue:队列设置,涉及 I/O 操作的调度策略等。
访问分区和设备属性: /sys/block/<device_name> 目录还可能包含指向分区的链接。例如,/sys/block/sda1 表示 sda 的第一个分区,/sys/block/sda2 表示第二个分区等。
管理设备: 某些情况下,可以通过写入特定文件来触发操作。例如,/sys/block/sda/device/delete 可以删除设备,或者通过 /sys/block/sda/queue 配置 I/O 调度器。
bus
在 Linux 中,/sys/bus 目录属于 sysfs 文件系统的一部分,用于表示和管理系统中所有总线(bus)和与总线相关的设备。总线是计算机硬件中用于连接不同硬件组件的一种通信路径。在 Linux 内核中,/sys/bus 目录提供了对各种硬件总线的信息访问接口。
/sys/bus 目录的作用
显示系统中所有总线的信息: /sys/bus 目录包含了系统中各种类型的总线的子目录。每个子目录代表一个总线类型,通常以总线的名称作为目录名。常见的总线类型有:
pci:表示 PCI 总线。
usb:表示 USB 总线。
scsi:表示 SCSI 总线。
i2c:表示 I2C 总线。
spi:表示 SPI 总线。
platform:表示平台总线(通常用于处理器和其他嵌入式设备之间的通信)。
管理总线上的设备: 每个总线目录下(例如 /sys/bus/pci)都有一个 devices 子目录,包含了连接到该总线的所有设备。设备通常以设备名(如 0000:00:1f.0)表示,表示某个特定的硬件设备。在这些设备目录中,你可以访问设备的属性和状态。
访问和控制总线和设备的操作: /sys/bus 目录下还包含了多个文件和目录,用于动态管理总线和设备的行为。例如,某些总线类型支持通过写入特定文件来加载驱动程序,或者向设备发送命令。
动态管理设备驱动: 在 /sys/bus 下,每个总线目录通常还包含一个 drivers 目录,里面包含了与该总线类型相关的驱动程序(如 PCI 驱动、USB 驱动等)。你可以通过该目录加载和卸载驱动程序,或者将设备与驱动程序绑定。
/sys/bus 目录下的一些常见内容
假设你有一个 PCI 设备,你可能会在 /sys/bus/pci 目录中看到类似如下的内容:
/sys/bus/pci/
├── drivers/
│ └── <pci_driver>
├── devices/
│ ├── 0000:00:1f.0
│ └── 0000:00:1f.1
└── rescan
drivers/:该目录下包含与该总线类型相关的所有驱动程序。如果有设备与驱动程序绑定,你会看到驱动程序的目录。
devices/:该目录下包含了所有连接到该总线的设备。每个设备以其设备标识符(如 0000:00:1f.0)表示,表示某个硬件设备。
rescan:该文件允许你触发对总线的重新扫描,以检测新的设备或者重新加载设备。例如,通过写入 1 到 rescan 文件,可以强制重新扫描 PCI 总线。
/sys/bus 下不同总线的具体功能
1. /sys/bus/pci
管理 PCI 总线的设备。通过 /sys/bus/pci/devices/ 可以访问所有 PCI 设备的属性。drivers 子目录中包含与 PCI 设备相关的驱动程序。你可以通过操作 rescan 文件重新扫描 PCI 总线。
2. /sys/bus/usb
管理 USB 总线的设备。包含 USB 主机控制器和连接到 USB 总线的设备。devices/ 目录下列出了所有连接的 USB 设备,通常包括外部存储设备、鼠标、键盘等。
3. /sys/bus/i2c
管理 I2C 总线上的设备。I2C 是一种常见的串行总线,通常用于嵌入式系统中的传感器、外部设备等。在 devices/ 中可以看到连接的 I2C 设备。
4. /sys/bus/spi
管理 SPI 总线上的设备。SPI 是另一种常见的串行通信协议,通常用于高速数据交换。类似 I2C 总线,devices/ 中包含连接到 SPI 总线的设备。
5. /sys/bus/platform
代表平台总线,通常用于与处理器、嵌入式设备之间的通信。该总线类型的设备通常是内嵌在 SoC(系统芯片)上的设备,如 GPIO、PWM、I2C 等外设。
class
在 Linux 中,/sys/class 目录是 sysfs 文件系统的一部分,用于提供系统中各种设备类(class)相关的信息和接口。每个子目录代表一个设备类别,所有的设备类都以 /sys/class/<class_name> 这种形式存在。/sys/class 目录下的设备类主要用于组织和管理特定类型的设备,并提供相应的接口,以便用户空间程序能够访问这些设备的属性和状态。
/sys/class 目录的作用
设备分类管理: /sys/class 目录将系统中的设备按照不同的类别进行组织。例如,字符设备、块设备、网络设备、电源管理设备等都会有各自的子目录。每个设备类的子目录下会包含所有属于该类别的设备。
设备属性和状态: 在每个设备类目录下,通常会有多个设备子目录,每个设备子目录代表一个特定的设备。通过这些设备子目录,可以访问设备的属性、状态、操作和配置。
提供与设备交互的接口: 用户可以通过访问和修改 /sys/class 目录下的文件和目录与硬件设备交互。对于某些设备,用户可以通过写入特定文件来执行操作,例如启动、关闭、重置设备,或者改变设备的配置。
/sys/class 目录中的常见子目录
/sys/class/block
该目录管理块设备(block devices)。块设备是指以固定大小的数据块为单位进行读写的设备,如硬盘、SSD、分区等。
在 /sys/class/block/ 下,每个块设备通常以设备名(如 sda, sdb 等)为子目录,用户可以通过这些子目录访问设备的属性。
/sys/class/net
该目录管理网络设备(network devices)。它包括了所有网络接口,如以太网接口、无线网卡等。
在 /sys/class/net/ 下,每个网络接口(如 eth0, wlan0, lo 等)都有一个子目录,提供与该接口相关的信息,如 MAC 地址、状态、传输速率等。
/sys/class/power_supply
该目录管理电源设备(power supply devices),例如电池、电源适配器、UPS 等。
每个电源设备(如 BAT0, ACAD 等)都有一个子目录,提供有关电池状态、电源电压、电流等的信息。
/sys/class/thermal
该目录管理系统中的热管理设备(thermal devices)。通常用于监测 CPU、GPU 或其他硬件组件的温度。
/sys/class/thermal/ 目录下通常有多个子目录,表示不同的热传感器和温控设备。
/sys/class/usb_device
该目录包含所有 USB 设备的信息。每个连接到系统的 USB 设备都有一个相应的子目录,提供设备的详细信息,如设备 ID、制造商、设备类型等。
/sys/class/input
该目录管理输入设备(input devices),如键盘、鼠标、触摸板等。
/sys/class/input/ 下的子目录表示不同的输入设备,可以访问它们的状态、事件和特性。
/sys/class/mem
该目录与内存管理相关,提供有关内存设备的信息。
/sys/class/rtc
该目录管理实时时钟(RTC, Real-Time Clock)设备。RTC 是一种硬件设备,通常用于保持系统的当前时间。
/sys/class/leds
该目录管理系统中的 LED 灯设备。许多硬件平台使用 LED 灯来表示设备状态,用户可以通过此目录控制 LED 的状态(开/关)。
/sys/class/watchdog
该目录管理看门狗设备(watchdog devices)。看门狗设备用于监控系统的健康状态,当系统发生故障时,自动重启或执行其他恢复措施。
/sys/class 目录中的文件和操作
每个设备子目录中可能包含多个文件,这些文件代表了设备的属性或可以用于与设备交互的接口。例如:
/sys/class/net/eth0/operstate:表示网络接口 eth0 的当前状态(如 up 或 down)。
/sys/class/net/eth0/address:表示网络接口 eth0 的 MAC 地址。
/sys/class/power_supply/BAT0/status:表示电池的当前充电状态(如 Charging, Discharging)。
/sys/class/thermal/thermal_zone0/temp:表示温度传感器的温度,通常单位为毫摄氏度。
用户还可以通过向某些文件写入特定的值来控制设备或修改其配置。例如:
向 /sys/class/net/eth0/operstate 写入 up 或 down 来启用或禁用网络接口。
向 /sys/class/thermal/thermal_zone0/thermal_config 写入配置来调整温控策略。
dev
在 Linux 系统中,/sys/dev 目录是 sysfs 文件系统的一部分,主要用于表示和管理系统中的各种设备。这个目录结构为系统中的设备提供了一个统一的视图,允许用户空间程序访问设备的信息、状态、属性以及控制接口。它的设计目的是使内核能够通过一个标准化的接口暴露硬件设备信息,并允许用户空间操作这些设备。
/sys/dev 目录的作用
设备信息管理: /sys/dev 目录为设备提供了一个标准化的路径,通过这个路径,内核可以将所有设备的详细信息暴露给用户空间。这些设备包括硬件设备、虚拟设备、系统设备等。
设备状态和属性访问: 设备的属性和状态通过 /sys/dev 目录下的文件进行管理。例如,可以通过读取某个文件获取设备的状态,或者通过写入某个文件来改变设备的配置。
设备控制接口: 在 /sys/dev 目录下,用户空间程序可以通过写入某些文件来控制硬件设备的行为,例如控制电源管理、设置设备模式、启用/禁用设备等。
设备驱动管理: 设备驱动信息也存放在该目录下,提供设备和驱动程序之间的绑定信息。它有助于调试和理解设备与驱动之间的关系。
/sys/dev 目录常见的子目录和文件
/sys/dev 目录下通常包含多个子目录,每个子目录代表系统中的某一类设备。以下是一些常见的子目录及其作用:
/sys/dev/block/
管理 块设备(block devices)。块设备是指那些数据以块为单位进行读写的设备,如硬盘、SSD、分区等。
/sys/dev/block/ 目录下包含了系统中的所有块设备的信息,每个设备通常以其设备名称(如 sda, sdb 等)为子目录。
你可以通过这些目录访问设备的大小、状态、挂载信息等。
/sys/dev/char/
管理 字符设备(character devices)。字符设备是指那些数据以字符为单位进行传输的设备,如串口设备、终端设备(tty)、键盘、鼠标等。
/sys/dev/char/ 目录下列出了系统中的字符设备,并提供对这些设备的访问接口。
devices
在 Linux 系统中,/sys/devices 目录是 sysfs 文件系统的一个重要部分,它包含了系统中所有设备的信息,并按照设备的类型和拓扑结构进行组织。该目录反映了硬件设备的层次结构,提供了一个统一的接口,用于访问、查看和管理设备的属性、状态、资源等。
/sys/devices 目录的作用
/sys/devices 目录的主要作用是展示系统中设备的树形结构,代表了所有硬件设备的层级关系。设备的属性和状态都可以通过这个目录来访问。它使得设备的管理更加标准化,并提供了从设备驱动到硬件设备的详细信息。
/sys/devices 目录结构
/sys/devices 目录下的内容通常会根据硬件设备的类型和系统架构的不同而有所变化。它的结构一般类似于一个树状层级,每个子目录代表系统中的一个设备,子目录的名称通常是设备的标识符,树的层次结构反映了设备之间的连接关系。
以下是 /sys/devices 目录下的一些常见子目录和它们的作用:
/sys/devices/pci0000:00/
该目录包含了系统中的 PCI 设备。pci0000:00 表示 PCI 总线的根设备,后面会有每个 PCI 设备的子目录。每个 PCI 设备有自己的信息目录,包含了设备的地址、资源(内存、I/O 地址)以及绑定的驱动程序等信息。
例如,/sys/devices/pci0000:00/0000:00:1f.0/ 目录表示一个具体的 PCI 设备。
/sys/devices/system/
该目录包含系统级的设备信息,例如 CPU、内存、电源管理设备等。
例如,/sys/devices/system/cpu/ 目录下会包含关于每个 CPU 核心的信息,如核心的状态(在线或离线)、CPU 的频率、负载等。
/sys/devices/system/memory/ 目录下包含内存设备的信息,例如内存的大小和分配情况。
/sys/devices/virtual/
该目录下包含 虚拟设备 的信息。虚拟设备通常不是直接对应硬件的设备,而是由内核提供的虚拟接口。
例如,/sys/devices/virtual/net/ 目录下可能包含网络接口的信息,如虚拟网络设备(tun、tap)等。
/sys/devices/platform/
该目录通常包含与平台相关的设备信息,平台特定的设备,如嵌入式设备上的特定硬件组件、SoC 上的外设等。
例如,某些嵌入式平台上的 GPIO、I2C、SPI 等硬件接口设备可能会出现在 /sys/devices/platform/ 目录下。
/sys/devices/ocp/(通常出现在 ARM 架构的嵌入式系统中)
该目录代表 系统芯片(SoC)上的外设。例如,GPIO 控制器、I2C 总线、SPI 总线等硬件接口的设备信息通常会出现在该目录下。
/sys/devices/ocp/ 目录包含了 ARM 设备的硬件信息,这些设备可能是通过硬件总线连接的外设。
/sys/devices 目录中的一些重要文件和目录
/sys/devices 目录下的每个设备子目录包含多个文件,这些文件提供了关于设备的详细信息、状态和控制接口。以下是一些常见的文件和目录:
firmware
在 Linux 系统中,/sys/firmware 目录是 sysfs 文件系统的一部分,用于提供有关系统固件(Firmware)和启动过程的信息。固件通常是嵌入在硬件中的低级软件,负责硬件的初始化和配置,通常在操作系统加载之前就运行。/sys/firmware 目录包含与系统固件相关的信息,尤其是在启动时对硬件的配置和管理。
/sys/firmware 目录的作用
访问固件信息: /sys/firmware 目录提供了操作系统访问固件信息的接口。操作系统可以从这个目录中获取固件的版本、配置、支持的功能等信息。
与固件交互: 系统中的一些硬件设备和平台可能需要与固件进行交互,/sys/firmware 目录为这些交互提供了一个统一的接口。例如,某些固件可能暴露给用户空间,以便操作系统可以动态查询或配置固件的行为。
固件加载和启动信息: 在启动过程中,系统固件(例如 BIOS、UEFI、设备固件等)负责硬件初始化。/sys/firmware 目录通常会提供有关固件状态和版本的信息,帮助系统进行调试和故障排除。
/sys/firmware 目录中的常见子目录和文件
/sys/firmware 目录的具体内容可能会因系统的架构和固件类型不同而有所变化,但通常会包含以下几个子目录和文件:
/sys/firmware/efi/(如果使用 UEFI 启动)
该目录包含与 UEFI(统一扩展固件接口) 相关的信息。UEFI 是现代计算机系统使用的固件接口,替代了传统的 BIOS。
在此目录中,用户可以找到与 EFI 相关的固件设置、变量、启动信息等。UEFI 通过它管理硬件的初始化、启动引导、操作系统加载等任务。
常见的子目录和文件包括:
/sys/firmware/efi/efivars/:存储 EFI 变量。EFI 变量用于存储关于启动过程、系统配置等的信息。
/sys/firmware/efi/systab:显示系统的 EFI 系统表,包括启动管理器和系统参数。
/sys/firmware/efi/vars:访问 EFI 固件变量,允许用户空间程序读取或修改 EFI 变量。
这些文件和目录使得 Linux 系统能够与 UEFI 固件进行交互,例如读取启动设置或修改启动顺序等。
/sys/firmware/acpi/(如果系统使用 ACPI)
ACPI(高级配置和电源接口) 是一种用于操作系统和固件之间进行硬件配置和电源管理的标准。在 /sys/firmware/acpi/ 目录下,用户可以找到与 ACPI 相关的信息。
ACPI 信息通常包括系统的电源状态、硬件资源、热管理等。
例如:
/sys/firmware/acpi/tables/:存储 ACPI 表格,ACPI 表格包含硬件设备的电源管理和配置参数。
/sys/firmware/dmi/(获取 DMI 信息)
DMI(桌面管理接口) 用于提供系统硬件的详细信息,如制造商、型号、BIOS 版本等。在此目录下,用户可以查看与 DMI 相关的文件,这些文件包含了计算机系统的硬件标识信息。
常见的文件包括:
/sys/firmware/dmi/id/:此目录下包含与系统硬件相关的 DMI 数据文件,如系统型号、制造商、BIOS 版本等。
/sys/firmware/ras/(如果系统支持 RAS)
RAS(可靠性、可用性和可维护性) 是一些高级硬件系统所支持的功能,用于增强硬件系统的稳定性和可靠性。
如果你的硬件支持 RAS 功能,系统可能会在 /sys/firmware/ras/ 目录下提供相关信息,如硬件故障、内存错误等。
fs
在 Linux 系统中,/sys/fs 目录是 sysfs 文件系统的一部分,用于暴露与文件系统相关的配置信息和状态。它的作用是提供系统关于文件系统的元数据(metadata),包括挂载的文件系统、文件系统的特性、支持的文件系统类型等信息。/sys/fs 目录可以帮助操作系统和用户了解系统支持的文件系统特性,并提供一定的文件系统管理接口。
/sys/fs 目录的作用
显示系统支持的文件系统信息: /sys/fs 目录提供了关于系统支持的文件系统类型、配置选项、状态等的详细信息。
提供文件系统挂载信息: 通过该目录,用户可以查看当前已挂载的文件系统的详细信息,包括每个文件系统的类型、挂载点等。
支持文件系统相关的配置和调试: /sys/fs 目录也可以提供一些文件系统的调试信息和配置接口,供内核开发者或高级用户进行系统诊断和调整。
/sys/fs 目录中的常见子目录和文件
/sys/fs 目录下的内容取决于当前系统的文件系统配置和内核支持的文件系统类型。以下是一些常见的子目录和文件:
/sys/fs/ext4/
如果系统支持 ext4 文件系统,则该目录提供与 ext4 文件系统相关的信息。ext4 是 Linux 中常见的文件系统之一。
该目录通常包含用于调试和配置 ext4 文件系统的文件。你可以查看 ext4 文件系统的配置和性能信息。
/sys/fs/btrfs/
如果系统支持 Btrfs 文件系统,则该目录会包含与 Btrfs 文件系统相关的文件。
例如,/sys/fs/btrfs/ 目录可以提供关于 Btrfs 文件系统的配置信息、状态和调试数据。
/sys/fs/fuse/
FUSE(用户空间文件系统) 是 Linux 中的一种机制,允许用户空间的程序创建自己的文件系统。如果系统支持 FUSE,则该目录会包含相关的文件。
/sys/fs/fuse/ 目录可以提供有关 FUSE 文件系统的挂载点、状态等信息。
/sys/fs/selinux/
SELinux(安全增强 Linux) 是一种强制访问控制(MAC)机制,用于加强 Linux 系统的安全性。如果系统启用了 SELinux,则该目录下会包含与 SELinux 相关的信息。
/sys/fs/selinux/ 目录包含 SELinux 状态、策略、上下文等信息,用于检查和配置 SELinux 的运行状态。
/sys/fs/crypto/
该目录与 文件系统加密 相关,尤其是 Linux 提供的加密文件系统(如 LUKS)相关的信息。
如果系统启用了加密文件系统,/sys/fs/crypto/ 目录可以提供有关文件系统加密、加密状态等的信息。
/sys/fs/namespace/
如果系统使用了 Linux 命名空间 功能(如 mnt、uts、pid 命名空间等),该目录会包含命名空间的相关信息。
/sys/fs/namespace/ 目录帮助管理和查看命名空间的状态和特性。
/sys/fs/usb/
如果系统启用了对 USB 文件系统 的支持(通常在支持 USB 存储设备时),该目录下会有相关的信息和状态。
/sys/fs/aufs/
AUFS(Another UnionFS) 是一种文件系统类型,允许用户将多个目录(通常是内存中的目录)合并成一个虚拟文件系统。/sys/fs/aufs/ 目录存储与 AUFS 文件系统相关的信息。
/sys/fs 目录的用途
检查文件系统的支持和状态: 你可以通过 /sys/fs 目录来检查当前系统支持的文件系统类型,并获取关于文件系统的详细信息。
调试和性能分析: 通过该目录下的文件,开发人员可以获取文件系统的状态信息,帮助进行性能调优或故障诊断。
文件系统配置和管理: /sys/fs 目录为文件系统管理提供了一些配置接口。例如,你可以通过修改相关文件来启用或禁用文件系统的某些特性,或者管理文件系统的挂载点。
hypervisor
在 Linux 系统中,/sys/hypervisor 目录是 sysfs 文件系统的一部分,用于提供与系统中虚拟化(Hypervisor)相关的信息。虚拟化是指通过软件模拟硬件来运行多个操作系统或虚拟机的技术,通常在服务器和云计算环境中广泛应用。
/sys/hypervisor 目录的作用
/sys/hypervisor 目录包含有关当前虚拟化环境的详细信息,尤其是在系统运行在虚拟机中时,或者操作系统运行在虚拟化主机上时。通过该目录,操作系统可以查询和识别是否在虚拟环境中运行,以及与虚拟化相关的一些参数和特性。
/sys/hypervisor 目录中的常见文件
/sys/hypervisor/uuid
该文件包含虚拟化环境的 UUID(通用唯一标识符)。UUID 是一个用于唯一标识虚拟化环境的标识符,可以帮助识别虚拟化平台。
如果系统运行在虚拟机中,/sys/hypervisor/uuid 文件会显示与虚拟机环境相关的 UUID;如果不在虚拟环境中运行,通常该文件的内容为空。
/sys/hypervisor/hostname
该文件通常包含虚拟化主机的主机名。如果系统运行在虚拟机中,/sys/hypervisor/hostname 文件会显示主机的名称。
/sys/hypervisor/properties/
此目录包含虚拟化环境的其他属性信息,如虚拟化平台的类型、版本等。对于支持的虚拟化平台,可以在这个目录下找到具体的属性和相关的配置选项。
/sys/hypervisor/type
该文件指示当前运行的虚拟化技术类型。例如,如果系统运行在 KVM(Kernel-based Virtual Machine)虚拟化平台上,/sys/hypervisor/type 文件会包含类似 kvm 的内容。如果系统不是在虚拟化环境中运行,该文件可能不存在或为空。
常见的虚拟化平台
通过 /sys/hypervisor/type 文件,操作系统可以判断当前是否在虚拟机中运行,常见的虚拟化平台包括:
KVM(Kernel-based Virtual Machine):一种开源的虚拟化技术,通常在 Linux 主机上使用。
Xen:一个开源的虚拟化平台,支持全虚拟化和半虚拟化模式。
VMware:VMware 是一种广泛使用的商业虚拟化平台,通常用于数据中心环境。
Hyper-V:微软的虚拟化平台,通常用于 Windows Server 环境。
kernel
在 Linux 系统中,/sys/kernel 目录是 sysfs 文件系统的一部分,用于提供与内核相关的配置、状态和信息。/sys/kernel 目录通过暴露内核的内部状态和参数,允许用户和程序查询、调整和调试内核的运行状况。这对于系统管理员、开发人员和调试人员非常有用,因为它提供了有关内核行为、功能和模块的信息。
/sys/kernel 目录的作用
/sys/kernel 目录主要提供关于内核的元数据、调试信息和一些可调整的内核参数。它帮助用户和开发人员了解内核的状态,修改内核的配置选项,并调试内核或内核模块的运行。
/sys/kernel 目录中的常见文件和子目录
/sys/kernel/debug/
该目录提供了调试信息,允许开发人员访问内核的调试和诊断工具。/sys/kernel/debug 目录通常在开启了内核调试功能后可用。
例如,debugfs 文件系统通常挂载在 /sys/kernel/debug/,它允许开发人员使用内核调试工具(如跟踪、调试信息)来分析内核行为。
/sys/kernel/slab/
该目录提供有关内核内存分配器的信息,特别是与 slab 分配器(用于内核内存分配)相关的信息。
可以通过 /sys/kernel/slab/ 查看内核内存的使用情况,尤其是在调试内存泄漏和性能优化时。
/sys/kernel/cpu
该目录包含关于 CPU 相关的内核信息,例如 CPU 核心的数量、架构、调度器等。
你可以在 /sys/kernel/cpu/ 目录下查看有关 CPU 的具体信息,并了解内核如何调度和管理 CPU。
/sys/kernel/boot
该目录通常包含内核引导过程相关的文件和配置。它可能会提供内核启动时的日志、引导配置或其他与引导过程相关的信息。
/sys/kernel/taints
该文件显示系统是否存在内核 "taint"。内核 "taint" 是指由于某些条件(例如加载了第三方模块或使用不稳定的内核配置)而可能影响内核稳定性的标志。
/sys/kernel/panic
该文件和目录用于内核崩溃时的处理和配置。panic 是内核发生致命错误时的一种反应,系统会停止工作并记录错误信息。通过该文件,可以配置内核在发生 panic 时的行为(如自动重启)。
module
在 Linux 系统中,/sys/module 目录是 sysfs 文件系统的一部分,用于提供内核模块的相关信息和控制内核模块的加载、卸载等操作。内核模块是可以动态加载和卸载的代码片段,通常用于扩展内核的功能,比如设备驱动程序、文件系统支持、网络协议栈等。
/sys/module 目录的作用
/sys/module 目录主要用于存放已加载的内核模块的信息,允许用户查看每个模块的状态、参数以及内存使用情况。此外,还可以通过该目录来控制内核模块的参数和行为。
/sys/module 目录中的常见文件和子目录
每个已加载的模块对应一个子目录:
在 /sys/module 目录下,每个已加载的内核模块都会有一个与模块名称相对应的子目录。这些子目录包含了有关模块的详细信息。
例如,如果系统加载了名为 tcp_bbr 的 TCP 拥塞控制模块,那么 /sys/module/tcp_bbr 就是与该模块相关的信息目录。
模块的参数:
在每个模块的子目录下,通常会有一个 parameters/ 子目录,包含模块的可配置参数。
例如,如果模块 tcp_bbr 有一个参数叫做 init_cwnd, 那么它会出现在 /sys/module/tcp_bbr/parameters/init_cwnd 目录下,你可以通过修改这个文件来改变模块的行为。
/sys/module/<module_name>/initstate:
该文件显示模块的初始化状态。内容通常是 live 或 uninitialized。live 表示模块已成功加载并正在运行,uninitialized 则表示模块尚未被初始化。
/sys/module/<module_name>/taints:
该文件显示模块是否会污染内核的稳定性,标志着可能影响内核稳定性的问题。例如,第三方模块(没有经过官方验证的模块)可能会导致内核的 taints 标志设置为某个特定值,从而标识该模块可能带来的不稳定性。
/sys/module/<module_name>/refcnt:
该文件表示当前加载的内核模块的引用计数。引用计数越高,表示模块被更多的部分依赖。引用计数为 0 时,模块可以被卸载。
/sys/module/<module_name>/version:
该文件包含模块的版本信息。例如,tcp_bbr 模块可能会有一个 version 文件,显示它的版本号。
/sys/module 目录的使用场景
查看和修改模块的参数: 通过 /sys/module/<module_name>/parameters/ 子目录,用户可以动态调整内核模块的参数。这对于调试、性能优化以及定制内核模块的行为非常有用。
调试和诊断内核模块: 如果某个模块出现问题,/sys/module/<module_name>/taints 和 /sys/module/<module_name>/refcnt 可以帮助分析是否是该模块引起的稳定性问题,或者该模块是否正在被其他内核部分使用。
内核模块的自动加载和卸载: 在某些情况下,内核模块的引用计数会影响模块的卸载。通过查看 /sys/module/<module_name>/refcnt,系统管理员可以判断模块是否可以安全地卸载,或者是否仍然被其他模块或内核部分所依赖。
内核模块的版本管理: 通过 /sys/module/<module_name>/version 文件,用户可以检查正在使用的内核模块的版本,这对于确保系统中加载的是正确版本的模块非常重要。
优化内核模块的性能: 某些内核模块允许动态调整其配置参数,这可以用来优化性能。例如,TCP 拥塞控制算法的内核模块就允许调整相关参数,调整后可以改善网络性能。
power
在 Linux 系统中,/sys/power 目录是 sysfs 文件系统的一部分,专门用于提供与系统电源管理相关的信息和控制接口。这个目录包含了许多与电源管理、休眠(suspend)、睡眠(sleep)模式以及系统的电源状态相关的设置和参数。
/sys/power 目录的作用
/sys/power 目录主要用于提供电源管理的接口,使得系统管理员或应用程序可以控制系统的电源管理功能,查看当前电源状态,以及调整与电源相关的各种参数。这些功能通常与系统的能效、睡眠模式、休眠模式等密切相关,旨在延长设备的电池使用寿命或在需要时提高系统的响应速度。
/sys/power 目录中的常见文件和子目录
/sys/power/state
该文件控制系统的休眠和睡眠状态。当系统进入某种睡眠模式时,state 文件会记录当前的电源状态。例如,系统可能进入 mem(内存睡眠模式)或 disk(硬盘休眠模式)。
写入该文件可以让系统进入特定的休眠状态。
/sys/power/wakeup_count
该文件显示设备唤醒的次数。每当设备从休眠状态恢复时,这个计数器会增加。可以用来分析系统的唤醒行为,诊断电源管理的相关问题。
/sys/power/mem_sleep
该文件允许用户配置休眠模式。具体而言,它控制系统在进入休眠(mem)模式时使用哪种电源管理策略。
常见的选项包括:
s2idle:更快的睡眠模式(低功耗)。
deep:深度睡眠模式(更低的功耗)。
/sys/power/pm_trace
该文件用于启用或禁用电源管理跟踪。设置为 1 会开启电源管理的跟踪功能,帮助开发人员调试和分析系统的电源管理行为。
/sys/power/pm_debug
该文件用于调试电源管理系统,允许用户启用或禁用调试信息输出。通过查看调试信息,用户可以帮助诊断电源管理过程中的问题。
/sys/power/hibernate
该文件控制系统是否可以进入休眠模式(hibernation)。系统进入休眠模式时,所有的系统状态都会保存到磁盘上,而不是内存,之后可以恢复到原来的状态。启用和禁用休眠模式通过这个文件进行控制。
/sys/power 目录的使用场景
系统休眠和睡眠管理: 系统管理员可以通过 /sys/power/state 和 /sys/power/mem_sleep 来控制系统的休眠和睡眠行为,从而节省电力消耗,延长电池使用时间(特别是在笔记本电脑或嵌入式设备上)。
电源管理调试: 通过启用电源管理跟踪(/sys/power/pm_trace)和查看统计信息(/sys/power/pm_stats),开发人员和系统管理员可以分析系统的电源管理行为,诊断休眠、唤醒、能效等问题。
优化系统功耗: 通过查看和调整电源管理参数,管理员可以优化系统的功耗表现,特别是在节能模式和休眠策略的选择上。
诊断唤醒问题: /sys/power/wakeup_count 文件提供设备唤醒的统计数据,帮助诊断哪些设备可能频繁唤醒系统,导致不必要的电池消耗。
调试和开发电源管理功能: 对于开发内核或驱动程序的开发人员,可以使用 /sys/power 目录中的文件来调试电源管理相关功能,确保系统的电源管理功能符合预期。
proc
在 Linux 系统中,/proc 目录是一个非常重要的虚拟文件系统(procfs)。它提供了关于内核、进程、系统状态、硬件信息等大量的实时信息。这个目录实际上并不包含实际的文件,而是由内核动态生成的,它用于表示内核的数据结构、进程信息和系统参数等。
/proc 目录的概括
/proc 目录是 Linux 系统中的一个虚拟文件系统,它提供了一种机制,让用户和管理员可以访问系统内核、进程和硬件状态等信息。所有的文件和目录都与系统的运行时状态相关,内容会随着系统状态的变化而变化。通过这些文件,用户和管理员可以获取关于系统硬件、配置、内核以及正在运行的进程的详细信息。
/proc 目录的详细介绍
以下是 /proc 目录中一些常见的文件和子目录,以及它们的功能:
1. /proc/cmdline
该文件包含了在系统启动时传递给内核的启动参数。比如内核调试选项、root 文件系统挂载选项等。
2. /proc/meminfo
该文件提供了关于系统内存的详细信息,包括总内存、已用内存、空闲内存、缓存等。
3. /proc/cpuinfo
该文件包含有关系统 CPU 的信息,如 CPU 型号、核心数量、频率、缓存大小等。
4. /proc/uptime
该文件显示系统的运行时间(自上次启动以来的秒数)和空闲时间(没有运行任何进程的时间)。
5. /proc/loadavg
该文件显示系统的平均负载(1分钟、5分钟和15分钟的平均负载)。
6. /proc/partitions
该文件列出了系统中所有的磁盘分区,包括磁盘设备的名称、大小等信息。
7. /proc/filesystems
该文件列出了内核支持的所有文件系统类型。
8. /proc/ioports
该文件显示系统中已注册的 I/O 端口区间。这些端口通常与设备的硬件资源相关。
9. /proc/interrupts
该文件显示系统中各个中断的使用情况和分配情况。中断是操作系统和硬件之间的通信机制。
10. /proc/pci
该文件显示 PCI 设备的信息,包括设备类型、总线号、设备号等。
11. /proc/net
该目录包含网络相关的文件,可以查看到系统的网络连接、网络接口、路由信息等。
12. /proc/[pid]
/proc 目录下的每个进程都有一个以进程 ID(PID)命名的子目录,包含了该进程的所有信息。
例如,/proc/12345/ 目录包含了进程 12345 的信息,如其内存使用、打开的文件、状态等。常见文件有:
/proc/[pid]/status: 进程的状态信息。
/proc/[pid]/fd/: 进程打开的文件描述符。
/proc/[pid]/maps: 进程的内存映射。
13. /proc/sys
该目录包含了内核的运行时参数,可以用来查看和调整内核参数(例如内存管理、文件系统设置等)。
14. /proc/sys/kernel
该目录包含内核的配置和状态信息,如内核调度策略、最大文件描述符数等。
15. /proc/sys/vm
该目录包含与虚拟内存管理相关的内核参数,如页面缓存大小、交换分区的行为等。
16. /proc/sys/fs
该目录包含文件系统相关的内核参数,如文件句柄的最大数量等。
/proc 目录的使用
查看系统资源状态: /proc 中的文件可以帮助系统管理员实时查看系统的资源状态,如 CPU、内存、负载等,便于系统性能调优。调试和故障排除: /proc 提供了大量的系统信息,对于调试系统问题和故障排除非常有用。例如,查看 /proc/interrupts 可以帮助诊断中断相关问题,查看 /proc/loadavg 可以帮助判断系统的负载情况。进程管理: /proc/[pid] 目录下的文件可以提供特定进程的详细信息,包括它的内存使用情况、打开的文件、进程的状态等,帮助进行进程级别的管理和优化。内核参数调整: /proc/sys 目录下的文件提供了内核参数的接口,管理员可以通过修改这些文件来调整内核的行为,进行性能优化或者启用某些内核特性。