Все эти функции определены в файле lib/kref.c
.Файловая система sysfs
Файловая система sysfs — это виртуальная файловая система, которая существует только в оперативной памяти и позволяет просматривать иерархию объектов kobject
kobject
могут экспортироваться в виде файлов, которые позволяют считывать значения переменных ядра, а также опционально записывать их.Хотя изначально целью создания модели представления устройств было описание топологии устройств системы для управления электропитанием, файловая система sysfs стала удачным продолжением этой идеи. Для того чтобы упростить отладку, разработчик унифицированной модели устройств решил экспортировать дерево устройств в виде файловой системы. Такое решение показало свою полезность вначале в качестве замены файлов, связанных с устройствами, которые раньше экспортировались через файловую систему /proc
kobject
, файловая система sysfs называлась driverfs. Позже стало ясно — новая объектная модель была бы очень кстати, и в результате этого появилась концепция объектов kobject
. Сегодня каждая система, на которой работает ядро 2.6, имеет поддержку файловой системы sysfs, и практически во всех случаях эта файловая система монтируется.Основная идея работы файловой системы sysfs — это привязка объектов kobject
dentry
, которое есть в структуре kobject
. Вспомните из материала главы 12, "Виртуальная файловая система", что структура dentry
используется для представления элементов каталогов. Связывание объектов с элементами каталогов проявляется в том, что каждый объект просто видится как каталог файловой системы. Экспортирование объектов kobject
в виде файловой системы выполняется путем построения дерева элементов каталогов в оперативной памяти. Но обратите внимание, объекты kobject
уже образуют древовидную структуру — нашу модель устройств! Поэтому простое назначение каждому объекту иерархии, которые уже образуют дерево в памяти, соответствующего элемента каталога позволяет легко построить файловую систему sysfs.На рис. 17.2 показан частичный вид файловой системы sysfs, которая смонтирована на каталог /sys
Рис. 17.2
. Содержимое части каталога/sys
Корневой каталог файловой системы sysfs содержит семь подкаталогов: block
bus
, class
, devices
, firmware
, module
и power
. В каталоге block
содержатся каталоги для каждого зарегистрированного в системе устройства блочного ввода-вывода.Каждый из каталогов в свою очередь содержит подкаталоги, соответствующие разделам блочного устройства. Каталог bus
class
представлена информация о системных устройствах, которая организована в соответствии с высокоуровневыми функциями этих устройств. Каталог devices содержит информацию о топологии устройств в системе. Она отображается непосредственно на иерархию структур устройств ядра. Каталог firmware
содержит специфичное для данной системы дерево низкоуровневых подсистем, таких как ACPI, EDD, EFT и т.д. В каталоге power
содержатся данные по управлению электропитанием всех устройств системы.Наиболее важным является каталог devices
/sys/class/net/
информация представлена в соответствии с высокоуровневым представлением зарегистрированных сетевых устройств. В этом каталоге может содержаться подкаталог eth0
, который содержит символьную ссылку device на соответствующее устройство каталога devices
.Посмотрите на содержимое каталога /sys
class
, низкоуровневым представлением в каталоге devices и драйверами устройств — в каталоге bus
. Такое представление взаимосвязи между устройствами очень информативно. Оно становится еще более ценным, если осознать, что все эти данные свободно доступны и описывают все то, что происходит внутри ядра[89].Добавление и удаление объектов на файловой системе sysfs
Инициализированные объекты kobject
kobject_add()
.