Псевдофайловая система sysfs

  • Ядро экспортирует информацию об устройствах и драйверах в пользовательское пространство (userspace) с помощью псевдофайловой системы sysfs, которая монтируется в каталог /sys
  • Основные подкаталоги sysfs:
    • devices/ — древо устройств
    • block/ — блочные (дисковые) устройства
    • class/ — устройства, сгруппированные по классам
    • bus/ — список шин и связанных с ними устройств и драйверов
    • dev/ — информация о файлах и устройствах
    • fs/ — информация о файловых системах
  1. Большинство файлов в sysfs содержат одно значение: имя файла — имя атрибута, содержимое файла — значение этого атрибута.
  2. В sysfs также хранится информация об ядре ОС (/sys/kernel) и о загруженных модулях ядра (/sys/module).

Менеджер устройств systemd-udevd

  • Подсистема udev предназначена для настройки и управления устройствами, которые были идентифицированы ядром ОС.
  • Подсистемы udev состоит из служб ядра и службы systemd-udevd, работающей в пользовательском пространстве (userspace).
  • Ядро ОС при добавлении или удалении hotplug устройства:
    • производит соответствующие изменения во внутренней структуре дерева устройства, которая отображает в sysfs
    • сообщает службе systemd-udevd о таком событии (uevent)
  • Служба systemd-udevd обрабатывает полученное событие и выполняет настройку устройства в соответствии с набором заданных правил (rules).
  1. Правила находятся в каталогах:
    • /usr/lib/udev/rules.d — системные правила (в этот каталог правила помещаются при установке программного обеспечения);
    • /etc/udev/rules.d — пользовательские правила (в этом каталоге администратор создает собственные правила).
  2. Имена файлов с правилами имеют суффикс rules. Порядок выполнения правил определяется лексической сортировкой имен файлов из всех каталогов (первые два символа в имени файла — цифры).
  3. Если файлы с правилами имеют одинаковые имена в разных каталогах, то выполняется правило из каталога /etc/udev/rules.d.
  4. Для передачи событий (uevents) менеджеру устройств systemd-udevd ядро использует специальный сокет netlink, который позволяет взаимодействовать процессам ядра с процессами из пользовательского пространства.
  5. После запуска службы systemd-udevd и создания сокета netlink ядру отправляется запрос о генерации событий об устройствах, обнаруженных на ранних стадиях инициализации ядра (systemd-udev-trigger.service)
  6. Во время загрузки системы на ранних стадиях инициализации ядра создается псевдофайловая система типа tmpfs, в которой ядро размещает файлы устройств. После монтирования корневой файловой системы tmpfs монтируется в каталог /dev.
  7. Менеджер устройств systemd-udevd может изменить права доступа к файлам устройств и создать символические ссылки на файлы устройств в каталоге /dev.

Правила udev

  • Правило udev записывается в одной строке и содержит критерии отбора и действия (присвоение значений переменным)
  • Операции для критериев отбора: «==», «!=»
  • Операции для действия: «=», «+=», «-=», «:=»
  • Переменные (ключи) для критериев отбора: KERNEL, ACTION, DEV PATH, SUBSYSTEM, ATTR, ATTRS, DRIVER
  • Переменные (ключи) для действий: NAME, SYMLINK, RUN, OWNER, GROUP, MODE
  • Пример: KERNEL==»sr0″, SYMLINK+=»cdrom»
  1. Переменные для критериев отбора:
    • KERNEL — имя, которое ядро присваивает устройству;
    • ACTION — действие, которое соответствует событию: add, remove, change;
    • DEV PATH — путь до устройства в sysfs;
    • SUBSYSTEM — содержимое файла со значением атрибута в каталоге устройства в sysfs.
    • ATTR {атрибуты} — содержимое файла со значением атрибута в каталоге устройства в sysf;
    • ENV {переменная} — значение переменной окружения.
  2. Переменные для действия:
    • NAME — создание файла устройств в каталоге /dev;
    • SYMLINK — создание символической ссылки на файл устройства;
    • OWNER, GROUP, MODE — задание владельца, группы-владельца, прав доступа к файлам устройства.
    • RUN — команды, которые должны быть выполнены, если срабатывают критерии отбора.
  3. Операции сравнения для составления критериев отбора:
    •  «==» — равенство;
    • «!=» — неравенство.
  4. Операции присвоения для описания действий:
    •  «=» — присвоение значения переменной;
    • «+=» и «-=» — добавление или удаление значение переменной;
    • «:=» — присвоение переменной окончательного значения, которое  в дальнейшем не может быть изменено другими правилами.

Утилита для управления udevd — udevadm

  • udevadm info — информация об устройстве (если указать параметр -a, то также выводится информация о всех родительских устройствах)
  • udevadm monitor — просмотр событий, которые получают udevd, в режиме реального времени
  • udevadm test — проверка правил
  • udevadm control — управление udevd
  • udevadm control —reload — перечитывание файлов с правилами, которые применяются только к новым событиям (uevents)
  • udevadm control -l info  — уровень журналирования info
  1. Проверка правил командой udevadm test не проводит к выполнению правил, а только показывает, какие правила будут выполнены и что будет сделано.
  2. В качестве аргумента udevadm test требует указать путь до устройства (значение переменной DEV PATH), который может быть получен командой udevadm info имя_файла_устройства.
  3. по умолчанию команда udevadm monitor выводит только информацию о событиях, но не показывает свойства (значение переменных) этих событий. Параметр -p (—property)  позволяет отслеживать события вместе с их свойствами.
  4. Подробнее в man 8 udevadm.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.