udev | |
---|---|
Тип | Device node |
Разработчики | Greg Kroah-Hartman и Kay Sievers |
Написана на | С |
Операционная система | Linux (ядро) |
Первый выпуск | ноябрь 2003 года |
Последняя версия | 252 (31 октября 2022)[1] |
Репозиторий | github.com/systemd/syste… |
Лицензия | GPL v2 |
Сайт | git.kernel.org/?p=linux/… |
udev (userspace /dev) — управление устройствами для новых версий ядра Linux, являющийся преемником devfs, hotplug и HAL. Его основная задача — обслуживание файлов устройств (англ. device nodes) в каталоге /dev и обработка всех действий, выполняемых в пространстве пользователя при добавлении/отключении внешних устройств, включая загрузку firmware.
udev добавлен в Linux 2.5.
В ядро Linux 2.6.13 введён и обновлён новый uevent интерфейс. Новый udev не будет работать на ядрах младше версии 2.6.13.
В апреле 2012 исходный код udev слился с исходным кодом systemd[2].
Официально стартовал проект eudev (форк udev от Gentoo) в качестве замены для Systemd-udevd. На прошедшей конференции FOSDEM 2013 разработчики eudev чётко обозначили, что eudev «является для них исключительно учебным проектом» и «их код в его текущем состоянии ни в коем случае нельзя рассматривать как готовый к эксплуатации» [1].
Благодаря udev в каталоге /dev находятся файлы только тех устройств, которые в настоящий момент подключены к системе. Каждое устройство имеет свой соответствующий файл. Если устройство отключается от системы, то данный файл удаляется. Содержимое каталога /dev хранится на виртуальной файловой системе, и все файлы, находящиеся в нём, создаются при каждом запуске системы. Модифицированные или созданные вручную файлы не сохраняются после перезагрузки. Файлы и каталоги, которые необходимо сохранить или которые всегда должны присутствовать в каталоге /dev, независимо от состояния соответствующего устройства, необходимо помещать в каталог /lib/udev/devices. При запуске системы содержимое данного каталога копируется в /dev как есть (с теми же правами доступа).
Таким образом, в отличие от традиционной для Unix схемы управления каталогом /dev, где его содержимое было неизменным набором файлов, udev обеспечивает динамическое управление устройствами, действительно находящимися в системе. Хотя раньше подобная функциональность обеспечивалась devfs, сторонники udev выделяют следующие преимущества своего решения[3]:
udev запускается как демон и принимает через сокет netlink события uevents от ядра, которые генерируются при инициализации или удалении устройства из системы. Задаваемые пользователем (системой) правила сверяются со свойствами события и соответствующего устройства, и совпавшее правило (которых может быть несколько) может назвать и создать соответствующий файл устройств, а также выполнить другие программы для инициализации и конфигурации устройства. Например, таким образом можно реализовать автоматическое монтирование внешних накопителей при их подключении.
Правила могут сверяться по таким свойствам, как конкретная ядерная подсистема, имя устройства в ядре, физическое расположение устройства, либо по серийному номеру устройства. Правила также могут запрашивать информацию при помощи других программ или указать, что имя устройства всегда будет одним и тем же, вне зависимости от порядка обнаружения устройств системой. Правила задаются в файле с произвольным именем, но с суффиксом .rules и находятся в /etc/udev/rules.d/ Существует хорошо описанный пример настройки.
Типичный способ использования udev на Linux-системе — позволить посылать события HAL или DeviceKit, чтобы они произвели последующие зависящие от устройств действия. Например, HAL/DeviceKit может уведомить остальные программы о новом устройстве при помощи широковещательного сообщения в D-Bus. Таким образом, рабочие среды типа GNOME или KDE могут автоматически смонтировать USB-накопитель и открыть файловый менеджер для просмотра его содержимого.
udev разделен на три части:
udev получает события от ядра через netlink-сокет. Ранние версии использовали hotplug, добавляясь в /etc/hotplug.d/default.