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) приведет к тому, что автоматически установится:

USE флаги программы udev следующие:

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

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

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

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

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

Based on this information, the rule can then state if
 * some information needs to be shared with later events (through environment variables)
 * links need to be created in
 * commands need to be executed

Udev does this for every rule that matches (so it does not stop after the first match) to allow a flexible device management approach.

Persistent device names
The kernel detects devices asynchronous, udev mirrors the kernel's sysfs filesystem and so the device are named and numbered in order of detection. So by default udev provides no persistent device names. However there are mechanismen for some device classes to provide these:


 * udev creates for storage devices additional symlinks based on the device's id, label, uuid and path. See the directory. So instead of using e.g. the device file  use the file.


 * The same for input devices in the directory.


 * Using custom rules you can create your own device files.

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


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


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

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

Log monitor messages
Log all message you see, when you run udevadm monitor:

It will create the new log file.

Debug mode
Enable debug mode to get more log messages:

It will create the new log file.

Missing device files and
Some udev versions need these files and can't create them on their own. So you have to create them:

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

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