Skip to content

sysfs Fundamentals

Sysfs (sys filesystem) is a virtual filesystem in Linux that provides a structured interface for user-space programs to access device and driver information exposed by the kernel. Unlike /proc, which focuses on process and kernel-state data, sysfs organizes hardware and driver details in a hierarchical tree, enabling dynamic discovery and configuration of kernel objects. It is a critical component for tools like udev, lshw, and lsmod, which rely on sysfs to monitor hardware changes and manage device drivers.

Overview

Sysfs was introduced to address limitations in /proc for device management. It maps kernel objects (e.g., devices, drivers, buses) into a directory structure under /sys. Each directory represents a kernel object, and files within these directories expose attributes such as device identifiers, status, and configuration parameters. For example, a USB device might appear as /sys/class/usb_device/usb0, with files like vendor_id and product_id containing numeric values.

Structure

Sysfs organizes data in a tree-like hierarchy, reflecting relationships between devices, drivers, and subsystems. Key directories include:
- /sys/class/: Contains device classes (e.g., usb, net, block).
- /sys/devices/: Represents hardware devices directly connected to the system.
- /sys/bus/: Houses bus types (e.g., pci, usb, spi).
- /sys/drivers/: Lists registered drivers.

Each directory contains files and subdirectories that describe attributes. For example, a block device might have:

/sys/block/sda/
├── queue
├── size
├── stat
└── uevent

Accessing Sysfs Data

User-space tools interact with sysfs via standard file operations. Common commands include:

# List device directories
ls /sys/class/usb_device/

# Read device attributes
cat /sys/class/usb_device/usb0/vendor_id

Dynamic tools like udev monitor sysfs for changes. For example, when a USB device is plugged in, udev reads /sys/class/usb_device/usb0/ to determine the device's properties and triggers rules for mounting or configuring it.

Use Cases

Sysfs is essential for:
1. Hardware discovery: Tools like lshw and lsblk use sysfs to list connected devices.
2. Driver debugging: Developers can inspect driver parameters via files like /sys/module/ entries.
3. Runtime configuration:Writable files (e.g., /sys/class/gpio/gpiochip0/label) allow dynamic adjustments.
4. System monitoring: Scripts can poll sysfs to track resource usage or hardware status.

Key takeaways

  • Sysfs provides a hierarchical, structured interface for accessing device and driver data.
  • It enables dynamic discovery, monitoring, and configuration of hardware via user-space tools.
  • Key directories include /sys/class/, /sys/devices/, and /sys/bus/.
  • Tools like udev and lshw rely on sysfs for hardware management.
  • Writable sysfs files allow runtime adjustments to device parameters.