Псевдофайловая система sysfs
- Ядро экспортирует информацию об устройствах и драйверах в пользовательское пространство (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) позволяет отслеживать события вместе с их свойствами.
- Подробнее в man 8 udevadm.