Eudev

Resources

Not to be confused with udev.

eudev is Gentoo's fork of udev, systemd's device file manager for the Linux kernel.[1] It manages device nodes in /dev and handles all user space actions when adding or removing devices.

The goal of eudev is to obtain better compatibility with existing software such as the OpenRC init system, Upstart init system, older Linux kernels, various toolchains, and anything else required[2] by (but not well supported through) udev.

Similar to ebuild, eclass, emerge, etc. eudev's name follows the 'E' prefix convention started by Gentoo's founder Daniel Robbins.

System configurations running systemd have no use for eudev.

The /dev directory[edit | edit source]

Most Linux users understand that /dev/sda1 is just a fast way of referring to the first partition on the first disk that the kernel found. That's pretty easy, right?

But consider hotpluggable devices like USB, IEEE 1394, hot-swappable PCI, etc. What is the first device for each of these? And for how long? What will the other devices be named when the first one disappears? How will that affect ongoing transactions? Wouldn't it be fun if a printing job were suddenly moved from a high-end laser printer to an almost-dead matrix printer just because someone decided to pull the plug on the laser printer (which just happened to be the first printer)?

Enter the device manager. A modern device manager (including udev and ) must:

  • Run in userspace;
  • Dynamically create and remove device files;
  • Provide consistent device naming;
  • Provide a userspace application program interface (API).

Every time a change happens within the device structure, the kernel emits a uevent which gets picked up by the device manager. The device manager then follows the rules declared in the /etc/udev/rules.d, /run/udev/rules.d and /lib/udev/rules.d 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 may involve the creation or deletion of device files, and may also trigger the loading of particular firmware files into kernel memory.

Installation[edit | edit source]

USE flags[edit | edit source]

Some packages know the udev USE flag for enabling virtual/udev integration.

USE flags for sys-fs/eudev Linux dynamic and persistent device naming support (aka userspace devfs)

hwdb read vendor/device string database and add it to udev database
introspection Add support for GObject based introspection
kmod enable module loading through libkmod
rule-generator install legacy rule generator rules and support scriptsnote that the functionality within was dropped from sys-fs/udev as it is not stable in all cases; use at your own risk
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
static-libs Build static versions of dynamic libraries as well
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)

Emerge[edit | edit source]

To avoid registration in the world set, the oneshot option should be used.

root #emerge --ask --oneshot sys-fs/eudev

Configuration[edit | edit source]

RC service[edit | edit source]

The RC name is udev, not eudev. It needs to be registered in the sysinit runlevel.

root #rc-update add udev sysinit
 * rc-update: udev already installed in runlevel `sysinit'; skipping

From sys-fs/udev-init-scripts version 29 onward, udev-trigger should also be added to the sysinit runlevel.

Optional: Keep classic network interface naming[edit | edit source]

Network device names such as eth0 or wlan0 as provided by the kernel are normally changed on system boot (see dmesg) by the /lib/udev/rules.d/80-net-name-slot.rules udev rule.

To keep the classic naming this rule can be overwritten with an equally named empty file in the /etc/udev/rules.d directory:

root #touch /etc/udev/rules.d/80-net-name-slot.rules

Alternatively add net.ifnames=0 to the kernel command line, change the default policy or create a custom one.

An interesting resource related to the network naming is I don't like this, how do I disable this on the Freedesktop wiki.

Migrating from udev to eudev[edit | edit source]

Migrating from udev 216 to eudev 1.10-r2 (March 2015) is straight forward:

root #emerge --ask --oneshot sys-fs/eudev

In case the system uses multilib and, for example, has the abi_x86_32 USE flag active against the older udev package, then don't forget to change it too:

FILE /etc/portage/package.useSwitching udev to eudev in package.use
# sys-fs/udev abi_x86_32
sys-fs/eudev abi_x86_32

Use new predictable network interface naming[edit | edit source]

The new network interface naming convention is not the same. So the symlinks used by netifrc will need to be re-linked. Use /etc/init.d/net.lo as a link target for whatever interface names need to be added. Be sure to replace <interface_name> in the commands below with the Ethernet interface names present on the system. It is possible to discover which interfaces exist by running the ip link command:

user $ip link

Create symbolic links for the existing interfaces in the /etc/init.d/ and /etc/conf.d/ directories:

root #ln -s /etc/init.d/net.lo /etc/init.d/net.<interface_name>
root #ln -s /etc/conf.d/net.lo /etc/conf.d/net.<interface_name>

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

root #rc-update add net.<interface_name> default

Troubleshooting[edit | edit source]

Using udevadm[edit | edit source]

Start udevadm monitor and see what happens:

user $udevadm monitor

Get device info using udevadm info followed by the device path:

user $udevadm info -p /devices/pci0000:00/0000:00:1d.7

Get the device path using its name:

user $udevadm info -q path -n input/mouse1
/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3.4/1-3.4:1.0/0003:046D:C404.0006/input/input24/mouse1

Test an event run using udevadm test followed by the device path for which an event is to be tested:

user $udevadm test /devices/pci0000:00/0000:00:1d.7

To get a list of all udevadm commands:

user $udevadm -h

Migrating older releases[edit | edit source]

udev 171-r10 to eudev 1.2-r1[edit | edit source]

See this post on the Gentoo forums.

Broken system switching from udev to eudev[edit | edit source]

See this post on the Gentoo forums.

See also[edit | edit source]

External resources[edit | edit source]

References[edit | edit source]

  1. Bug 575718 - Request for council decision RE virtual/udev default provider, Gentoo's Bugzilla Main Page, (Last modified) February 27th, 2016. Retrieved on March 1st, 2016.
  2. Project:Eudev, Gentoo Wiki, (Last modified) November 12th, 2015. Retrieved on March 11th, 2016.
    This article is issued from Gentoo. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.