Udev

udev
Тип Device node
Разработчики Greg Kroah-Hartman и Kay Sievers
Написана на С
Операционная система Linux (ядро)
Дата выпуска ноябрь 2003 года
Последняя версия
Репозиторий 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 поддерживает неизменное именование устройств, не зависящее, например, от порядка включения устройств в систему. Конфигурация по умолчанию обеспечивает неизменное именование для накопителей: жесткие диски идентифицируются по уникальному идентификатору файловой системы, имени диска и расположению устройства, к которому подключен диск.
  • udev работает целиком в пространстве пользователя. Это приводит, в частности, к тому, что udev может выполнять произвольные программы для составления имени устройства либо его инициализации.

Принцип работы

udev запускается как демон и принимает через сокет netlink события uevents от ядра, которые генерируются при инициализации или удалении устройства из системы. Задаваемые пользователем (системой) правила сверяются со свойствами события и соответствующего устройства, и совпавшее правило (которых может быть несколько) может назвать и создать соответствующий файл устройств, а также выполнить другие программы для инициализации и конфигурации устройства. Например, таким образом можно реализовать автоматическое монтирование внешних накопителей при их подключении.

Правила могут сверяться по таким свойствам, как конкретная ядерная подсистема, имя устройства в ядре, физическое расположение устройства, либо по серийному номеру устройства. Правила также могут запрашивать информацию при помощи других программ или указать, что имя устройства всегда будет одним и тем же, вне зависимости от порядка обнаружения устройств системой.

Типичный способ использования udev на Linux-системе — позволить посылать события HAL или DeviceKit, чтобы они произвели последующие зависящие от устройств действия. Например, HAL/DeviceKit может уведомить остальные программы о новом устройстве при помощи широковещательного сообщения в D-Bus. Таким образом, рабочие среды типа GNOME или KDE могут автоматически смонтировать USB-накопитель и открыть файловый менеджер для просмотра его содержимого.

Архитектура

udev разделен на три части:

  • Библиотека libudev, позволяющая получать доступ к информации об устройствах.
  • Демон udevd, работающий в пространстве пользователя и управляющий содержимым /dev.
  • Программа udevadm, используемая для отладки и диагностики.

udev получает события от ядра через netlink-сокет. Ранние версии использовали hotplug, добавляясь в /etc/hotplug.d/default.

Примечания

  1. Release 261.2 — 2026.
  2. Sievers, Kay, Commit importing udev into systemd, systemd, Архивировано 8 июля 2012, Дата обращения: 25 мая 2012 Источник. Дата обращения: 29 октября 2012. Архивировано 8 июля 2012 года.
  3. アーカイブされたコピー. Дата обращения: 10 мая 2014. Архивировано 11 апреля 2011 года.

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.