Udev/ru

udev это менеджер устройств для ядра Linux. Он управляет файлами устройств в каталоге и обрабатывает все действия из пользовательского пространства при добавлении или удалении устройств. Читателям этой статьи следует также посмотреть на eudev форк udev.

Каталог /dev
Когда пользователи Linux разговаривают о начинке своих систем среди людей, полагающих, что Linux — это какой-то вид вируса или марка кофе, пользуясь оборотами вроде «слэш дев слэш что—нибудь» (/dev/foo), на них наверняка смотрят косо. Но для счастливчиков (естественно, включая читающих эту статью), — просто быстрый способ сослаться на первый раздел диска SATA на первичном канале. Это довольно легко, не так ли?

Большинство пользователей Linux знают, что такое файл устройства. Некоторые даже знают, почему рядом с ними видны специальные числа. Внимательно посмотрите на список устройств запустив в каталоге. Но примем за данность, что первичный ведущий диск IDE называется. У некоторых может быть и не так, но это всего лишь пример.

Представим себе устройства «горячей замены» вроде USB, IEEE1394, PCI с возможностью горячей замены и т.д. Какое из них является первым по счету? Надолго ли? Как изменятся названия других устройств, если первое отключить? Как это повлияет на текущие операции? Было бы забавно, если бы задание печати вдруг переключалось с вашего супер навороченного лазерного принтера на старый полудохлый матричный из-за того, что мама решила выдернуть разъем лазерного принтера, а тот, по счастью, оказался первым в списке, не так ли?

Перейдем к. Цели проекта udev как занимательны, так и актуальны. Udev:


 * работает в пользовательском пространстве;
 * динамически создаёт и удаляет файлы устройств;
 * согласованное назначение имен устройств;
 * предоставляет (API) для программ работающих в пространстве пользователя.

Каждая раз, когда в структуре устройств появляется изменение, ядро генерирует uevent, который ловится. Затем следует правилам, которые определены в каталогах,  и. На основании информации в uevent, он находит правило или правила, которые он должен выполнить, и выполняет необходимые действия. Эти действия могут заключаться в создании или удалении файлов устройств, но могут и загружать нужные файлы прошивки в память ядра.

Ядро
Для требуется включить следующие параметры ядра:

USE-флаги
Portage знает о глобальном  USE-флаге для включения поддержки udev в остальных пакетах. Добавьте этот USE-флаг в список USE-флагов (он включен по умолчанию для всех Linux профилях) приведет к тому, что пакет автоматически установится:

Emerge
После настройки USE-флагов обновите систему, чтобы изменения вступили в силу:

Запуск как сервис
Чтобы запустить udev при загрузке, добавьте его к уровню запуска sysinit. Это может быть сделано при помощи следующей команды, если она запущена с привилегиями root пользователя:

Правила
udev дает возможность создавать правила, которые проверяют uevents (события, посланные ядром) и задают свойства найденного устройства. Совпадающее правило, возможно, даст устройству имя, создаст файл устройства, и запустит программу конфигурации, чтобы настроить устройство.

Определения правил сохраняются в двух местах:


 * 1)  - правила в этом каталоге создают некоторые установленные пакеты, они, как правило, не должны изменятся пользователями;
 * 2)  - этот каталог для пользовательских настроек. Любое новое правило должно быть добавлено в этот каталог.

В этих каталогах, несколько файлов правил (с суффиксом ) в буквенно-цифровом порядке имен, по возрастанию. Внутри файлов правил, udev ищет выражения, которые могут совпасть с uevent (добавляется устройство или удаляется) и команду для выполнения.

Выражения проверяются на совпадение на основании следующей информации:


 * Поле SUBSYSTEM uevent (для какого типа устройства был uevent)
 * Действие (поле ACTION), которое было предпринято (добавление, удаление, либо изменение устройства)
 * Один или более атрибутов (через поля ATTR or ATTRS), например, класс устройства, производитель, либо другая информация об устройстве
 * Имя, данное ядром (через поле KERNEL), например, sd* (для дисков SCSI/SATA), либо input* (для устройств ввода, таких, как мыши и клавиатуры)
 * Одна или более настройка окружения (через поле ENV), используемая для информации, которая может использоваться несколькими правилами сразу.

На основании этой информации, правило может сделать следующее:


 * 1) определить информацию, которую необходимо будет передать более поздним событиям (через переменные окружения)
 * 2) создать ссылки в
 * 3) выполнить команды

Udev делает эти действия для каждого правила, для которого находит соответствие (он не останавливается после первого совпадения), позволяя организовать гибкий подход к управлению устройствами.

Постоянные имена устройств
Ядро определяет устройства асинхронно, а udev зеркалирует файловую систему sysfs ядра так, чтобы устройствам были даны названия и номера в порядке их определения. Так что, по умолчанию udev не дает постоянных имен устройств. Однако существуют механизмы для того, чтобы этого добиться (для некоторых классов устройств).


 * Udev создает дополнительные символические ссылки для устройств хранения, на основании ID, label, UUID и расположения устройства. Посмотрите в каталог . Так что, вместо того, чтобы использовать файл устройства, используйте файл.


 * То же самое для устройств ввода в каталоге.


 * Используя свои правила, пользователи могут создавать собственные файлы устройств.

Использование
Некоторые полезные команды:


 * Показать все сообщения о заданном файле устройства:


 * Мониторинг активности udev:


 * Назначение постоянного имени для интернет устройства:

Смотрите man страницу udevadm для более детальной информации.

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

Это создаст новый файл лога.

Режим отладки
Включение режима отладки выведет еще больше сообщений в логах:

Установите приоритет логгинга

Будет создан файл логов, однако никакие сообщения в него не будут записываться. Самые новые версии udev будут отправлять все сообщения в.

Отсутствующие файлы устройств и
Некоторые версии udev нуждаются и  файлах для корректной работы, и не могут создать их сами. Чтобы вручную создать эти файлы для Udev выполните следующие команды с привилегиями root:

Сетевая карта определена как eth0, но изменилась на eth1
Те, у кого две сетевых карты на материнской плате, могут попасть в ситуацию, когда не покажет eth0 или eth1. может показать, что сетевая карта определена как eth0, а затем переименована в eth1. При выполнении также будет показана сетевая карта как eth1. Это из-за того, что имена, определенные ядром используются в первую очередь. Пользователи должны написать свои правила, например, в файле, и задать свои имена, вроде lan0 или wireless0, либо использовать предсказуемые имена интерфейсов (которые были включены по умолчанию начиная с udev версии 197).

Также, помните, что нужно удалить старые файлы, оставшиеся от старых версий udev:

Смотрите также
eudev - форк udev разрабатываемый Gentoo.

External resources
- Default virtual/udev provider changed to sys-fs/eudev