/sys (sysfs) — виртуальная файловая система, предоставляющая доступ к внутренней объектной модели ядра Linux (device model).
Основная задача — экспорт структур ядра (kobject) в пользовательское пространство в виде иерархии файлов.
Тип монтирования:
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
Назначение
sysfs решает следующие задачи:
- Представление device model ядра
- Экспорт информации об устройствах и драйверах
- Интерфейс управления параметрами устройств
Модель данных
Общая структура
Иерархия /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
- Информация о загруженных модулях
- Параметры модулей
Интерфейс и операции
Поддерживаемые операции
openreadwritereaddir
Семантика
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 и предоставляющая строгий интерфейс для их инспекции и управления.