Чтение онлайн

на главную - закладки

Жанры

Разработка ядра Linux
Шрифт:

На рис. 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] .

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
.

void kobject_del(struct kobject *kobj);

Функция

kobject_unregister
сочетает в себе выполнение функций
kobject_del
и
kobject_put
.

void kobject_unregister(struct kobject* kobj);

Все эти четыре функции определены в файле

lib/kobject.c
и объявлены в файле
<linux/kobject.h>
.

Добавление файлов на файловой системе sysfs

Объекты

kobject
отображаются на каталоги, и такое отображение выполняется естественным образом. А как насчет создания файлов? Файловая система sysfs — это не что иное, как дерево каталогов без файлов.

Атрибуты, используемые по умолчанию

Набор файлов, которые создаются в каталоге по умолчанию, определяется с помощью поля

ktype
объектов
kobject
и множеств
kset
. Следовательно, все объекты
kobject
одного типа имеют один и тот же набор файлов в каталогах, которые этим объектам соответствуют. Структура
kobject_type
содержит поле
default_attrs
, которое представляет собой массив структур
attribute
. Атрибуты отображают данные ядра на файлы в файловой системе sysfs.

Структура

attributes
определена в файле
<linux/sysfs.h>
.

/* структура attribute - атрибуты позволяют отобразить данные ядра

 на файлы файловой системы sysfs */

struct attribute {

 char *name; /* имя атрибута */

 struct module *owner; /* модуль, если есть, которому

принадлежат данные */

 mode_t mode; /* права доступа к файлу */

};

Поле

name
содержит имя атрибута. Такое же имя будет иметь и соответствующий файл на файловой системе sysfs. Поле
owner
 — это указатель на структуру
module
, которая представляет загружаемый модуль, содержащий соответствующие данные. Если такого модуля не существует, то значение поля равно
NULL
. Поле
mode
имеет тип
mode_t
и указывает права доступа к файлу на файловой системе sysfs. Если атрибут предназначен для чтения всеми, то флаг прав доступа должен быть установлен в значение
S_IRUGO
, если атрибут имеет право на чтение только для владельца, то права доступа устанавливаются в значение
S_IRUSR
. Атрибуты с правом на запись, скорее всего, будут иметь права доступа
S_IRUGO | S_IWUSR
. Все файлы и каталоги на файловой системе sysfs принадлежат пользователю с идентификаторами пользователя и группы равными нулю.

Поделиться:
Популярные книги

Черный маг императора 3

Герда Александр
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора 3

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

Пипец Котенку! 3

Майерс Александр
3. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 3

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Боги, пиво и дурак. Том 6

Горина Юлия Николаевна
6. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 6

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Ты всё ещё моя

Тодорова Елена
4. Под запретом
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Ты всё ещё моя

S-T-I-K-S. Пройти через туман

Елисеев Алексей Станиславович
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
7.00
рейтинг книги
S-T-I-K-S. Пройти через туман

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Я князь. Книга XVIII

Дрейк Сириус
18. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я князь. Книга XVIII

Королевская Академия Магии. Неестественный Отбор

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Королевская Академия Магии. Неестественный Отбор

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

Жребий некроманта. Надежда рода

Решетов Евгений Валерьевич
1. Жребий некроманта
Фантастика:
фэнтези
попаданцы
6.50
рейтинг книги
Жребий некроманта. Надежда рода