Ядро экспортирует информацию об устройствах и драйверах в пользовательское пространство (userspace) с помощью псевдофайловой системы sysfs, которая монтируется в каталог /sys
Основные подкаталоги sysfs:
devices/ — древо устройств
block/ — блочные (дисковые) устройства
class/ — устройства, сгруппированные по классам
bus/ — список шин и связанных с ними устройств и драйверов
dev/ — информация о файлах и устройствах
fs/ — информация о файловых системах
Большинство файлов в sysfs содержат одно значение: имя файла — имя атрибута, содержимое файла — значение этого атрибута.
В sysfs также хранится информация об ядре ОС (/sys/kernel) и о загруженных модулях ядра (/sys/module).
Менеджер устройств systemd-udevd
Подсистема udev предназначена для настройки и управления устройствами, которые были идентифицированы ядром ОС.
Подсистемы udev состоит из служб ядра и службы systemd-udevd, работающей в пользовательском пространстве (userspace).
Ядро ОС при добавлении или удалении hotplug устройства:
производит соответствующие изменения во внутренней структуре дерева устройства, которая отображает в sysfs
сообщает службе systemd-udevd о таком событии (uevent)
Служба systemd-udevd обрабатывает полученное событие и выполняет настройку устройства в соответствии с набором заданных правил (rules).
Правила находятся в каталогах:
/usr/lib/udev/rules.d — системные правила (в этот каталог правила помещаются при установке программного обеспечения);
/etc/udev/rules.d — пользовательские правила (в этом каталоге администратор создает собственные правила).
Имена файлов с правилами имеют суффикс rules. Порядок выполнения правил определяется лексической сортировкой имен файлов из всех каталогов (первые два символа в имени файла — цифры).
Если файлы с правилами имеют одинаковые имена в разных каталогах, то выполняется правило из каталога /etc/udev/rules.d.
Для передачи событий (uevents) менеджеру устройств systemd-udevd ядро использует специальный сокет netlink, который позволяет взаимодействовать процессам ядра с процессами из пользовательского пространства.
После запуска службы systemd-udevd и создания сокета netlink ядру отправляется запрос о генерации событий об устройствах, обнаруженных на ранних стадиях инициализации ядра (systemd-udev-trigger.service)
Во время загрузки системы на ранних стадиях инициализации ядра создается псевдофайловая система типа tmpfs, в которой ядро размещает файлы устройств. После монтирования корневой файловой системы tmpfs монтируется в каталог /dev.
Менеджер устройств systemd-udevd может изменить права доступа к файлам устройств и создать символические ссылки на файлы устройств в каталоге /dev.
Правила udev
Правило udev записывается в одной строке и содержит критерии отбора и действия (присвоение значений переменным)
Операции для критериев отбора: «==», «!=»
Операции для действия: «=», «+=», «-=», «:=»
Переменные (ключи) для критериев отбора: KERNEL, ACTION, DEV PATH, SUBSYSTEM, ATTR, ATTRS, DRIVER
Переменные (ключи) для действий: NAME, SYMLINK, RUN, OWNER, GROUP, MODE
Пример: KERNEL==»sr0″, SYMLINK+=»cdrom»
Переменные для критериев отбора:
KERNEL — имя, которое ядро присваивает устройству;
ACTION — действие, которое соответствует событию: add, remove, change;
DEV PATH — путь до устройства в sysfs;
SUBSYSTEM — содержимое файла со значением атрибута в каталоге устройства в sysfs.
ATTR {атрибуты} — содержимое файла со значением атрибута в каталоге устройства в sysf;
ENV {переменная} — значение переменной окружения.
Переменные для действия:
NAME — создание файла устройств в каталоге /dev;
SYMLINK — создание символической ссылки на файл устройства;
OWNER, GROUP, MODE — задание владельца, группы-владельца, прав доступа к файлам устройства.
RUN — команды, которые должны быть выполнены, если срабатывают критерии отбора.
Операции сравнения для составления критериев отбора:
«==» — равенство;
«!=» — неравенство.
Операции присвоения для описания действий:
«=» — присвоение значения переменной;
«+=» и «-=» — добавление или удаление значение переменной;
«:=» — присвоение переменной окончательного значения, которое в дальнейшем не может быть изменено другими правилами.
Утилита для управления udevd — udevadm
udevadm info — информация об устройстве (если указать параметр -a, то также выводится информация о всех родительских устройствах)
udevadm monitor — просмотр событий, которые получают udevd, в режиме реального времени
udevadm test — проверка правил
udevadm control — управление udevd
udevadm control —reload — перечитывание файлов с правилами, которые применяются только к новым событиям (uevents)
udevadm control -l info — уровень журналирования info
Проверка правил командой udevadm test не проводит к выполнению правил, а только показывает, какие правила будут выполнены и что будет сделано.
В качестве аргумента udevadm test требует указать путь до устройства (значение переменной DEV PATH), который может быть получен командой udevadm info имя_файла_устройства.
по умолчанию команда udevadm monitor выводит только информацию о событиях, но не показывает свойства (значение переменных) этих событий. Параметр -p (—property) позволяет отслеживать события вместе с их свойствами.