Udev/ru

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

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

Most Linux users know what a device file is. Some even know why device files have special numbers. Take a close look at device list when is issued in the  folder. What users take for granted is that the primary SATA disk is referred to as Some users might not see it this way, but this is a flaw by design.

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

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


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

Every time a change happens within the device structure, the kernel emits a uevent which gets picked up by. then follows the rules as declared in the, and  directories. Based on the information contained within the uevent, it finds the rule or rules it needs to trigger and performs the required actions. These actions can be creating or deleting device files, but can also trigger the loading of particular firmware files into kernel memory.

Ядро
requires the following kernel options:

USE flags
Portage knows the  global USE flag for enabling support for udev in other packages. Adding this USE flag value to the USE flag list (default in all Linux profiles) will pull in the package automatically:

Emerge
After setting USE flags update the system so the changes take effect:

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

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

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


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

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

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


 * The SUBSYSTEM of the uevent (for which type of device is the uevent fired);
 * The ACTION that is taken (add, change, or remove);
 * One or more attributes (through ATTR or ATTRS), such as the device class, vendor or other device information;
 * The kernel-provided name (through KERNEL), such as sd* (for SCSI/SATA disks) or input* (for input devices such as mice and keyboards);
 * One or more environment settings (through ENV), used to send information between multiple rules.

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


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

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

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


 * 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.


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


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

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


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


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

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

Логгинг сообщений монитора
To log all message when is ran, modify the following configuration file:

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

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

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

The log file will be created but no messages will be logged to it. The most recent versions of udev will log all messages to.

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

Сетевая карта определена как eth0, но изменилась на eth1
Those having dual network cards on their motherboards may run into a situation where may show no eth0 or eth1. may show their NIC detected as eth0, and later moved to eth1. Performing a will also show the NIC as eth1. This is caused by using the kernel assigned names in the first place. Users should write custom rules like to use free names like lan0 or wireless0 or use predictable interface names (which have been enabled by default since udev version 197).

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