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, он находит правило или правила, которые он должен выполнить, и выполняет необходимые действия. Эти действия могут заключаться в создании или удалении файлов устройств, но могут и загружать нужные файлы прошивки в память ядра.

Kernel
You need to activate the following kernel options:

Software
Portage knows the global USE flag udev for enabling support for udev in other packages. Enabling this USE flag (default in all linux profiles) will pull in automatically:

The USE flags of udev are:

After setting this you want to update your system so the changes take effect:

Service
To start udev at boot time, add it your sysinit runlevel:

Rules
udev provides a set of rules that match against exported values of uevents (events sent by the kernel) and properties of the discovered device. A matching rule will possibly name and create a device node and run configured programs to set-up and configure the device.

The rule definitions are stored in (installed by packages) and  (for end-user specified rules). In these directories, multiple rule files (with suffix ) are traversed in alphanumerical order. Inside the rules files, udev will find expressions that might match a uevent together with the state to match (is the uevent because a device is added or removed) and the command to execute.

The event matching is based on information such as:
 * 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

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.

Usage
Some useful commands are:


 * Show all messages about a given device file:


 * Monitor udev activities:

See the udevadm man page for more information.

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:

NIC assigned eth0, but is moved to eth1
Those having dual network cards on their motherboards may run into a situation where ifconfig may show no eth0 or eth1. Dmesg may show their NIC detected as eth0, and later moved to eth1. Performing a "ifconfig -a" will also show the NIC as eth1. This is caused by using the kernel assigned names in the first place. You should write your own rules like to use free names like lan0 or wireless0 or use the predictable interface names which are enabled by the default since version 197.

Remember to also remove old files from old versions of udev: