Udev/ru

udev это менеджер устройств для ядра Linux. Он обрабатывает файлы устройств в каталоге /dev и обрабатывает все действия пользователя при добавлении/удалении устройств. Также посмотрите на eudev, это страница программы, выполняющей ту же функцию, что и udev.

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

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

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

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


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

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

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

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

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

Запуск как сервис
Чтобы запустить udev при загрузке, добавьте его к уровню запуска sysinit:

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

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

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

На основании этой информации, правило может сделать следующее:
 * определить информацию, которую необходимо будет передать более поздним событиям (через переменные окружения)
 * создать ссылки в
 * выполнить команды

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

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


 * udev создает дополнительные символические ссылки для устройств хранения, на основании id, label, uuid и path для устройства. Посмотрите в каталог . Так что, вместо того, чтобы использовать файл устройства, используйте файл.


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


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

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


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


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

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

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

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

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

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

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

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

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

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

External resources

 * udev source code