Udev/ru

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

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

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

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

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


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

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

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

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

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

Запуск как сервис
Чтобы запустить 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 для более детальной информации.

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

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

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

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

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

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

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

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

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

eudev - A Gentoo maintained fork of udev.