eudev

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Eudev and the translation is 100% complete.

Other languages:
English • ‎español • ‎日本語 • ‎polski • ‎русский • ‎中文(中国大陆)‎


Resources

eudev — разрабатываемый Gentoo менеджер файлов устройств для ядра Linux[1] для конфигураций, не использующих systemd. Он управляет файлами устройств в каталоге /dev и обрабатывает все пользовательские действия добавления и удаления устройств. eudev является форком udev и создан с целью предоставить лучшую совместимость с существующим программным обеспечением, таким, как OpenRC, Upstart, старые версии ядра, различные тулчейны и другие сущности[2] , требующие для работы udev, но плохо поддерживаемые им. Конфигурации, использующие systemd, не должны использовать eudev.

Каталог /dev

Большинство пользователей Linux знают, что /dev/sda1 это простой способ сослаться на первый раздел на первом, обнаруженным ядром, диске. Это довольно просто, не так ли?

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

Обзор диспетчера устройств. Современный диспетчер устройств (включая udev и eudev) должен уметь:

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

Каждая раз, когда в структуре устройств появляется изменение, ядро генерирует uevent, который ловится диспетчером устройств (eudev, udev). Затем диспетчер устройств следует правилам, которые определены в каталогах /etc/udev/rules.d, /run/udev/rules.d и /lib/udev/rules.d. На основании информации из uevent, он находит правило или правила, которые он должен вызвать, и выполняет необходимые действия. Эти действия могут заключаться в создании или удалении файлов устройств, но могут и загружать нужные файлы прошивки в память ядра.

Установка

USE-флаги

Некоторые пакеты используют udev USE-флаг для включения интеграции с virtual/udev.

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 local
introspection Add support for GObject based introspection global
kmod enable module loading through libkmod local
rule-generator install legacy rule generator rules and support scripts - note that the functionality within was dropped from sys-fs/udev as it is not stable in all cases; use at your own risk local
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur global
static-libs Build static versions of dynamic libraries as well global
test Workaround to pull in packages needed to run with FEATURES=test. Portage-2.1.2 handles this internally, so don't set it in make.conf/package.use anymore global

Emerge

Необходимо использовать параметр oneshot, чтобы не записывать пакет в набор world.

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

Конфигурация

RC-сервисы

RC-именем является udev, а не eudev. Оно должно быть зарегистрировано на уровне запуска sysinit.

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

Начиная с 29 версии sys-fs/udev-init-scripts, udev-trigger также должен быть добавлен в уровень запуска sysinit.

Миграция с udev на eudev

Миграция с udev 216 на eudev 1.10-r2 (март 2015) осуществляется прямо:

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

Если система использует multilib и для старого пакета udev установлен USE-флаг abi_x86_32, не забудьте также поменять его:

Файл /etc/portage/package.useПереключение с udev на eudev в package.use
# sys-fs/udev abi_x86_32
sys-fs/eudev abi_x86_32

Оставить классическое именование 'eth0'

Имена сетевых устройств, как их предоставляет ядро, eth0, wlan0 и так далее, могут быть изменены во время загрузки (смотрите dmesg) с помощью /lib/udev/rules.d/80-net-name-slot.rules правила udev.

Чтобы сохранить классическое именование это правило может быть перезаписано пустым файлом с таким же именем в каталоге /etc/udev/rules.d:

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

Также можно добавить net.ifnames=0 в командную строку ядра, изменить политику по умолчанию или добавить собственную.

Интересный ресурс на тему именования сетевых интерфейсов: страница I don't like this, how do I disable this на вики Freedesktop.

Использование нового 'предсказуемого' именования

Новая схема именования интерфейсов отличается от старой, поэтому символьные ссылки интерфейсов необходимо создать заново. Создайте ссылки на /etc/init.d/net.lo для любых имен интерфейсов, которые необходимо добавить. Не забудьте заменить <interface_name> в нижеприведенных примерах на имена Ethernet-интерфейсов, присутствующих в системе. Узнать, какие интерфейсы присутствуют в системе, можно с помощью команды ifconfig:

user $ifconfig

Создайте символьные ссылки для существующих сетевых интерфейсов в каталогах /etc/init.d/ и /etc/conf.d/:

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>

Добавьте скрипт(ы) в уровень запуска default, чтобы интерфейс(ы) стартовали автоматически:

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

Устранение проблем

Использование udevadm

Запустите udevadm monitor и посмотрите, что происходит:

user $udevadm monitor

Получите информацию об устройстве с помощью команды udevadm info, за которой следует путь к устройству:

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

Получите путь к устройству, используя его имя:

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

Проверьте событие с помощью команды udevadm test, за которой следует путь к устройству, для которого нужно проверить событие:

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

Чтобы получить список всех команд udevadm:

user $udevadm -h

Миграция со старых версий

С udev 171-r10 на eudev 1.2-r1

Смотрите этот пост на Gentoo форумах.

Система сломалась при миграции с udev на eudev

Смотрите этот пост на Gentoo форумах.

Смотрите также

Внешние ресурсы

Ссылки

  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.