Udev/de

udev (user ) ist Article description:: Gerätemanager für den Linux-Kernel. Er verwaltet Geräteknoten in und wickelt alle User-Space-Aktionen beim Hinzufügen und Entfernen von Geräten ab.

The package is used as the default device manager for Gentoo systems using the  init system, independently of systemd.

Kernel
requires the following kernel options:

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

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

Service
To start udev at boot time, add it to the sysinit runlevel. This can be done by issuing the following command with root privileges:

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 setup and configure the device.

The rule definitions are stored in two locations:


 * 1)  - Rules in this directory are installed by certain packages, they generally should not be changed by users;
 * 2)  - This folder is for end-user specified rules. Any new rules should be added in this directory;

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:


 * 1) Some information needs to be shared with later events (through environment variables)
 * 2) Links need to be created in
 * 3) Commands need to be executed

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

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


 * Udev creates for storage devices additional symlinks based on the device's ID, 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 enables users to create their own device files.

Predictable network interface naming
The new network interface naming convention is not the same. So the used by  will need to be re-linked. Use as a link target for whatever interface names need to be added. Be sure to replace   in the commands below with the Ethernet interface names present on the system. It is possible to discover which interfaces exist by running the command:

Create a symbolic link for the existing interfaces in the directory:

Edit with any necessary configuration for all interfaces.

Add the script(s) to the default runlevel to have the interface(s) start automatically:

Optional: Disable or override predictable network interface naming
Network device names such as  or   as provided by the kernel are normally changed on system boot (see ) by the  udev rule and the NamePolicy in.

This behavior may be disabled in several ways:


 * 1) Symlink  to :.
 * 2) Create a lower-numbered .link file in  which assigns a different name to the interface.
 * 3) Pass   on the kernel command line.

Reference: https://systemd.io/PREDICTABLE_INTERFACE_NAMES/

Usage
Some useful commands are:


 * Monitor all udev activities:




 * Show all messages about a given device file:




 * Show udev info about a given device file (might be obtained via ):




 * Udev rules file example - assign a persistent name to an Ethernet device:




 * After changing a rules file in, either reboot or make udev reload them with:




 * For already added devices (plugged USB, etc.), the reloaded rules take effect either after changing the device (replugging USB, etc.) or by making udev request kernel events again via . Various event actions can be triggered. By default, the change event action is triggered:



See the  for more information.

Log monitor messages
To log all message when is run, modify the following configuration file:

It will create the new log file located at.

Debug mode
Enabling debug mode will output more log messages:

Set the logging priority:

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.

Missing device files and
Some udev versions need the and  files in order to work properly, but can not create them on their own. To manually create these files for udev run the following commands with root privileges:

NIC assigned eth0, but is moved to 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).

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

Also make sure not to pass  on the kernel commandline. This setting would disable the predictable interface names feature of udev altogether.

External resources

 * - Default provider changed to