В Linux у каждого каталога есть своя цель существования. То же самое верно и для каталога sysfs. Записи sysfs используются ядром для экспорта информации в процессы в пользовательском домене и для получения ввода от пользователя. Эти записи перемещаются по файловой системе, чтобы найти зарегистрированные для нее функции отображения и сохранения.
Записи в sysfs можно сортировать по типу шины, типу объекта, типу устройства, взаимосвязям родитель/потомок и т. д. Симлинки помогают уменьшить избыточность.
В этой статье мы рассмотрим файловую систему sysfs в Linux. Начнем с обзора sysfs.
Sysfs впервые появилась в Linux в версии ядра 2.6.0.
sysfs — это виртуальная файловая система в Linux. Это означает, что файлы в sysfs не находятся на диске или каком-либо физическом носителе. Однако содержимое файловых систем хранится в памяти. Первоначально sysfs была основана на ramfs и называлась ddfs (файловая система драйвера устройства).
Sysfs отправляет данные в пространство пользователя с помощью виртуальных файлов. Эти данные содержат данные о различных подсистемах ядра, аппаратных устройствах и связанных с ними драйверах устройств.
Обычно sysfs монтируется в раздел /sys и автоматически монтируется системой. Также его можно смонтировать вручную при загрузке с помощью файла fstab :
$ mount -t sysfs sysfs /sys
Из предыдущей команды мы видим, что sysfs монтируется в /sys. Это стандартное место, где монтируется sysfs.
Sysfs — это кластер файлов, папок и символических ссылок. Большинство файлов внутри /sys доступны только для чтения. Некоторые файлы также доступны для записи, что помогает изменять переменные ядра. Симлинки широко используются для связывания записей по всему дереву файловой системы.
Мы рекомендуем использовать команду tree, чтобы увидеть полное представление этого каталога. В нашей системе команда «tree» показывает в общей сложности 9480 каталогов и 38635 файлов, что представляет собой обширную коллекцию файлов и каталогов.
На верхнем уровне при загрузке системы создаются 11 основных подкаталогов. Эти подкаталоги являются представлениями основных подсистем, зарегистрированных в sysfs. При загрузке эти подсистемы регистрируются в ядре kobject. После завершения инициализации они начинают находить объекты, зарегистрированные в соответствующих каталогах.
Давайте теперь рассмотрим несколько файлов и подкаталогов файловой системы /sys и обсудим их основное назначение. Наиболее важными виртуальными подкаталогами на верхнем уровне /sys являются блок, шина, гипервизор, класс, устройства, ядро, прошивка, модуль и питание.
1. /sys/block : у него есть одна символическая ссылка и каталоги для каждого блочного устройства, обнаруженного в системе. Эти символические ссылки указывают на соответствующие каталоги в каталоге /sys/devices. Здесь есть много подкаталогов:
Блочные устройства, показанные голубым цветом, имеют атрибуты, содержащие информацию о разделах. Примерами таких подкаталогов являются sda, sdb и т. д.
2. /sys/bus : шина — это среда/канал между процессором и устройством или устройствами. Примеры типов шин включают PCI, PCMCIA, SCSI или USB. Для каждого типа шины в ядре существует подкаталог, который находится в каталоге /sys/bus. В каждом таком подкаталоге есть еще два подкаталога: устройства и драйверы.
i) устройства: содержит символические ссылки на записи в /sys/devices (глобальное дерево устройств) для каждого устройства, обнаруженного на шине.
ii) драйвер: содержит подкаталог для каждого драйвера устройства, загруженного на шину. Эти подкаталоги содержат атрибуты для управления параметрами драйвера и символическими ссылками.
3. /sys/class: class — это высокоуровневое представление устройства. Этот каталог также содержит еще один уровень подкаталогов для каждого класса устройств, зарегистрированных в системе. Этими классами могут быть терминалы, сетевые устройства, звуковые устройства и т. д. Эти подкаталоги содержат символические ссылки для каждого устройства в классе. Эти символические ссылки указывают на записи в каталоге /sys/devices.
4. /sys/class/net : каждая символическая ссылка в этом каталоге представляет одно из реальных или виртуальных сетевых устройств, которые видны в сетевом пространстве имен процесса, обращающегося к каталогу. Каждая такая символическая ссылка указывает на записи в каталоге /sys/devices.
5. /sys/devices : Каталог /sys/device содержит все дерево устройств ядра в представлении файловой системы. Он включает каждое физическое устройство, обнаруженное типами шин, зарегистрированными в ядре.
6. /sys/firmware : содержит интерфейсы для управления объектами и атрибутами, специфичными для прошивки. Здесь прошивка — это код, который выполняется при загрузке системы. Например, платформа может быть биос x86, OpenFirmware и ia64. Например, в папке EFI есть много файлов.
Пример вывода:
$ ls firmware/efi/
config_table esrt fw_vendor runtime systab efivars fw_platform_size mok-variables runtime-map vars
Каждый из этих файлов содержит некоторое значение параметра.
7. /sys/kernel: В этом подкаталоге есть много файлов и папок, которые содержат данные об активном ядре.
8. /sys/module: для каждого модуля, загруженного в ядро, есть подкаталог, который находится в этом каталоге. Именование этих подкаталогов основано на имени соответствующего ядра. Внутри каждого каталога модуля есть подкаталог, называемый разделами, который содержит атрибуты разделов модуля. Многие файлы имеют тип coresize, initsize, initstate, srcversion и т. д. Точно так же существует множество подкаталогов, таких как драйверы, держатели, заметки, параметры и т. д.
9. /sys/power: представляет подсистему питания и имеет только два атрибута: диск и состояние. Способ перехода системы в спящий режим/приостановку определяется «disk». «State» позволяет мощности достичь состояния с низким энергопотреблением.
В этой статье мы узнали о файловых системах sysfs в Linux, а также увидели различные подкаталоги и их назначение. sysfs содержит огромное количество данных. Дополнительную информацию можно найти на справочных страницах, а также на этой странице, которая размещена на kernel.org.