/sys (sysfs) — виртуальная файловая система, предоставляющая доступ к внутренней объектной модели ядра Linux (device model).

Основная задача — экспорт структур ядра (kobject) в пользовательское пространство в виде иерархии файлов.

Тип монтирования:

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)

Назначение

sysfs решает следующие задачи:

  1. Представление device model ядра
  2. Экспорт информации об устройствах и драйверах
  3. Интерфейс управления параметрами устройств

Модель данных

Общая структура

Иерархия /sys строго отражает внутреннюю модель объектов ядра.

Ключевые разделы:

  • /sys/devices/ — физическое дерево устройств
  • /sys/class/ — логические классы устройств
  • /sys/block/ — блочные устройства
  • /sys/bus/ — шины (bus)
  • /sys/module/ — модули ядра

Объектная модель

Каждый элемент в sysfs — это:

  • kobject (ядро)
  • представленный как каталог
  • содержащий атрибуты (файлы)

Связи между объектами реализуются через:

  • иерархию каталогов
  • символические ссылки

Представление данных

  • Один файл = один атрибут
  • Формат:
    • строка (обычно текст)
    • одно значение
  • Отсутствуют агрегированные или сложные структуры

Пример:

cat /sys/block/sda/queue/read_ahead_kb

Основные подсистемы

/sys/devices

  • Каноническое дерево устройств
  • Отражает физическое расположение устройств
  • Используется как источник истины

/sys/class

  • Абстракции поверх устройств
  • Группировка по типу (например, сеть, input)
  • Удобен для user-space

Пример:

/sys/class/net/eth0/

/sys/block

  • Блочные устройства
  • Символические ссылки на /sys/devices

/sys/bus

  • Представление шин (PCI, USB и др.)
  • Связывает устройства и драйверы

/sys/module

  • Информация о загруженных модулях
  • Параметры модулей

Интерфейс и операции

Поддерживаемые операции

  • open
  • read
  • write
  • readdir

Семантика

  • read:
    • возвращает текущее значение атрибута
  • write:
    • изменяет состояние объекта
    • может инициировать действия в ядре

Пример:

echo 1 > /sys/class/net/eth0/carrier

Ограничения и правила

sysfs накладывает строгие ограничения:

  • Один файл — одно значение
  • Значение должно быть атомарным
  • Размер обычно ограничен PAGE_SIZE (~4KB)
  • Запрещены:
    • сложные форматы
    • бинарные структуры (за редкими исключениями)

Свойства интерфейса

  • Строгая иерархия
  • Прямая связь с внутренними структурами ядра
  • Стабильный ABI для user-space
  • Предсказуемость форматов

Связь с драйверами

sysfs является основным интерфейсом для:

  • регистрации устройств
  • экспорта атрибутов драйвера
  • управления параметрами устройств

Каждый драйвер может:

  • создавать атрибуты
  • определять поведение read/write

Безопасность

  • Контроль через стандартные права доступа (mode)
  • Возможность ограничения записи
  • Влияние на систему при записи (side effects)

Практическое использование

Инспекция устройств

  • определение параметров устройств
  • анализ топологии

Настройка

  • изменение параметров устройств
  • управление поведением драйверов

Интеграция

  • udev
  • системные утилиты (lsblk, ip, ethtool)

Ограничения для разработки

  • Не использовать для сложных интерфейсов
  • Не нарушать правило “один атрибут — один файл”
  • Для событий и асинхронных взаимодействий использовать:
    • netlink
    • uevents

Краткое определение

/sys — виртуальная файловая система, отражающая объектную модель устройств ядра Linux и предоставляющая строгий интерфейс для их инспекции и управления.