На рис. 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
, который экспортирует модель устройств ядра во внешний мир. Структура каталога соответствует топологии устройств в системе. Большинство информации, которая содержится в других каталогах, — это просто другое представление данных каталога devices. Например, в каталоге /sys/class/net/
информация представлена в соответствии с высокоуровневым представлением зарегистрированных сетевых устройств. В этом каталоге может содержаться подкаталог eth0
, который содержит символьную ссылку device на соответствующее устройство каталога devices
.
Посмотрите на содержимое каталога /sys
той системы Linux, к которой вы имеете доступ. Такое представление системных устройств является очень четким и ясным. Оно показывает взаимосвязь между высокоуровневым представлением информации в каталоге class
, низкоуровневым представлением в каталоге devices и драйверами устройств — в каталоге bus
. Такое представление взаимосвязи между устройствами очень информативно. Оно становится еще более ценным, если осознать, что все эти данные свободно доступны и описывают все то, что происходит внутри ядра [89] Если вас заинтересовала информация о файловой системе sysfs, то, вероятно, вам будет интересно также ознакомиться с HAL, hardware abstraction layer (уровень абстракции аппаратного обеспечения), информация о котором доступна по адресу http://hal.freedesktop.org/ . Подсистема HAL позволяет создать в оперативной памяти базу данных на основании информации файловой системы sysfs, объединяя вместе понятия классов, устройств и драйверов. На основании этих данных уровень HAL предоставляет API, которое позволяет разрабатывать более интеллектуальные программы.
.
Добавление и удаление объектов на файловой системе sysfs
Инициализированные объекты kobject
автоматически не экспортируются через файловую систему sysfs. Для того чтобы сделать объект видимым через sysfs, необходимо использовать функцию kobject_add()
.
int kobject_add(struct kobject *kobj);
Положение объекта на файловой системе sysfs зависит от его положения в объектной иерархии. Если установлен указатель parent
объекта, то объект будет отображен внутри каталога, соответствующего объекту, на который указывает указатель parent. Если указатель parent
не установлен, то объект будет отображен в каталоге, соответствующем значению переменной kset->kobj
. Если для некоторого объекта не установлены ни значение поля parent, ни значение поля kset
, то считается, что данный объект не имеет родительского и будет отображаться в корневом каталоге файловой системы sysfs
. Такое поведение практически всегда соответствует тому, что нужно. Поэтому одно из полей parent или kset
(или оба) должно быть установлено правильным образом перед вызовом функции kobject_add()
. Имя каталога, который представляет объект kobject
в файловой системе sysfs, будет определяться значением поля kobj->name
.
Вместо того чтобы последовательно вызывать функции kobject_init()
и kobject_add()
, можно вызвать функцию kobject_register()
.
int kobject_register(struct kobject *kobj);
Удаление объекта из файловой системы sysfs выполняется с помощью функции kobject_del()
.
Читать дальше