Udev: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
версия
Reformat 1 URL (Wayback Medic 2.5)) #IABot (v2.0.9.5) (GreenC bot
 
(не показано 14 промежуточных версий 9 участников)
Строка 1: Строка 1:
{{Карточка программы
{{Карточка программы
|name = udev
| name = udev
|logo =
| logo =
|screenshot =
| screenshot =
|caption =
| caption =
|collapsible =
| collapsible =
|author =
| author =
|developer = [[Greg Kroah-Hartman]] и Kay Sievers
| developer = [[Greg Kroah-Hartman]] и Kay Sievers
|released = [[ноябрь]] [[2003 год]]а
| released = [[ноябрь]] [[2003 год]]а
| последняя версия = 252 ([[31 октября]] [[2022]])<ref>{{cite web|title=systemd v252|url=https://github.com/systemd/systemd/releases/tag/v252|access-date=2022-12-01|archive-date=2022-11-30|archive-url=https://web.archive.org/web/20221130201531/https://github.com/systemd/systemd/releases/tag/v252|url-status=live}}</ref>
|frequently_updated = yes<!-- Release version update? Don't edit this page, just click on the version number! -->
| frequently_updated = yes<!-- Release version update? Don't edit this page, just click on the version number! -->
|latest_release_version = 240
| programming_language = [[Си (язык программирования)|С]]
|latest_release_date = [[21 декабря]] [[2018 год]]а
| operating_system = [[Linux (ядро)]]
|programming_language = [[Си (язык программирования)|С]]
| platform =
|operating_system = [[Linux (ядро)]]
| size =
|platform =
| language =
|size =
| status =
|language =
| genre = [[Device node]]
|status =
| license = [[GNU General Public License|GPL v2]]
|genre = [[Device node]]
| website = http://git.kernel.org/?p=linux/hotplug/udev.git
|license = [[GNU General Public License|GPL v2]]
|website = http://git.kernel.org/?p=linux/hotplug/udev.git
}}
}}
{{заголовок со строчной буквы}}
{{заголовок со строчной буквы}}

'''udev''' — менеджер устройств для новых версий ядра [[Linux (ядро)|Linux]], являющийся преемником [[devfs]], hotplug и [[HAL (freedesktop.org)|HAL]]. Его основная задача — обслуживание [[Файл устройства|файлов устройств]] ({{lang-en|device nodes}}) в каталоге [[:/dev]] и обработка всех действий, выполняемых в [[пространство пользователя|пространстве пользователя]] при добавлении/отключении внешних устройств, включая загрузку [[firmware]].
'''udev''' ''([[userspace]] /dev)'' — управление устройствами для новых версий ядра [[Linux (ядро)|Linux]], являющийся преемником [[devfs]], hotplug и [[HAL (freedesktop.org)|HAL]]. Его основная задача — обслуживание [[Файл устройства|файлов устройств]] ({{lang-en|device nodes}}) в каталоге [[:/dev]] и обработка всех действий, выполняемых в [[пространство пользователя|пространстве пользователя]] при добавлении/отключении внешних устройств, включая загрузку [[firmware]].


== История ==
== История ==
Строка 29: Строка 29:
В ядро Linux 2.6.13 введён и обновлён новый [[uevent]] интерфейс. Новый udev не будет работать на ядрах младше версии 2.6.13.
В ядро Linux 2.6.13 введён и обновлён новый [[uevent]] интерфейс. Новый udev не будет работать на ядрах младше версии 2.6.13.


В апреле 2012 исходный код udev слился с исходным кодом [[systemd]]<ref>{{citation |last=Sievers |first=Kay |title=Commit importing udev into systemd |url=http://cgit.freedesktop.org/systemd/systemd/commit/?id=19c5f19d69bb5f520fa7213239490c55de06d99d |work=systemd |accessdate=25 May 2012}}</ref>.
В апреле 2012 исходный код udev слился с исходным кодом [[systemd]]<ref>{{citation |last=Sievers |first=Kay |title=Commit importing udev into systemd |url=http://cgit.freedesktop.org/systemd/systemd/commit/?id=19c5f19d69bb5f520fa7213239490c55de06d99d |work=systemd |access-date=2012-05-25 |archive-date=2012-07-08 |archive-url=https://archive.today/20120708192654/http://cgit.freedesktop.org/systemd/systemd/commit/?id=19c5f19d69bb5f520fa7213239490c55de06d99d |url-status=live }} {{Cite web |url=http://cgit.freedesktop.org/systemd/systemd/commit/?id=19c5f19d69bb5f520fa7213239490c55de06d99d |title=Источник |access-date=2012-10-29 |archive-date=2012-07-08 |archive-url=https://archive.today/20120708192654/http://cgit.freedesktop.org/systemd/systemd/commit/?id=19c5f19d69bb5f520fa7213239490c55de06d99d |url-status=unfit }}</ref>.


Официально стартовал проект [https://web.archive.org/web/20141026115606/http://www.gentoo.org/proj/en/eudev/ eudev] (форк udev от [[Gentoo]]) в качестве замены для Systemd-udevd. На прошедшей конференции FOSDEM 2013 разработчики eudev чётко обозначили, что eudev «является для них исключительно учебным проектом» и «их код в его текущем состоянии ни в коем случае нельзя рассматривать как готовый к эксплуатации» [http://www.opennet.ru/opennews/art.shtml?num=36032].
Официально стартовал проект [https://web.archive.org/web/20141026115606/http://www.gentoo.org/proj/en/eudev/ eudev] (форк udev от [[Gentoo]]) в качестве замены для Systemd-udevd. На прошедшей конференции [[FOSDEM]] 2013 разработчики eudev чётко обозначили, что eudev «является для них исключительно учебным проектом» и «их код в его текущем состоянии ни в коем случае нельзя рассматривать как готовый к эксплуатации» [http://www.opennet.ru/opennews/art.shtml?num=36032].


== Описание ==
== Описание ==
Благодаря udev в каталоге [[:/dev]] находятся файлы только тех устройств, которые в настоящий момент подключены к системе. Каждое устройство имеет свой соответствующий файл. Если устройство отключается от системы, то данный файл удаляется. Содержимое каталога /dev хранится на [[Виртуальная файловая система|виртуальной файловой системе]], и все файлы, находящиеся в нём, создаются при каждом запуске системы. Модифицированные или созданные вручную файлы не сохраняются после перезагрузки. Файлы и каталоги, которые необходимо сохранить или которые всегда должны присутствовать в каталоге /dev, независимо от состояния соответствующего устройства, необходимо помещать в каталог /lib/udev/devices. При запуске системы содержимое данного каталога копируется в /dev как есть (с теми же правами доступа).
Благодаря udev в каталоге [[:/dev]] находятся файлы только тех устройств, которые в настоящий момент подключены к системе. Каждое устройство имеет свой соответствующий файл. Если устройство отключается от системы, то данный файл удаляется. Содержимое каталога /dev хранится на [[Виртуальная файловая система|виртуальной файловой системе]], и все файлы, находящиеся в нём, создаются при каждом запуске системы. Модифицированные или созданные вручную файлы не сохраняются после перезагрузки. Файлы и каталоги, которые необходимо сохранить или которые всегда должны присутствовать в каталоге /dev, независимо от состояния соответствующего устройства, необходимо помещать в каталог /lib/udev/devices. При запуске системы содержимое данного каталога копируется в /dev как есть (с теми же правами доступа).


Таким образом, в отличие от традиционной для [[Unix]] схемы управления каталогом <tt>/dev</tt>, где его содержимое было статичным набором файлов, udev обеспечивает динамическое управление устройствами, действительно находящимися в системе. Хотя раньше подобная функциональность обеспечивалась [[devfs]], сторонники udev выделяют следующие преимущества своего решения<ref>{{cite web |url=http://kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs |title=アーカイブされたコピー |accessdate=2014-05-10 |archiveurl=https://web.archive.org/web/20110411233322/http://kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs |archivedate=2011-04-11 }}</ref>:
Таким образом, в отличие от традиционной для [[Unix]] схемы управления каталогом <tt>/dev</tt>, где его содержимое было неизменным набором файлов, udev обеспечивает динамическое управление устройствами, действительно находящимися в системе. Хотя раньше подобная функциональность обеспечивалась [[devfs]], сторонники udev выделяют следующие преимущества своего решения<ref>{{cite web |url=http://kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs |title=アーカイブされたコピー |access-date=2014-05-10 |archive-url=https://web.archive.org/web/20110411233322/http://kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs |archive-date=2011-04-11 }}</ref>:
* udev поддерживает неизменное именование устройств, не зависящее, например, от порядка включения устройств в систему. Конфигурация по умолчанию обеспечивает неизменное именование для накопителей: жесткие диски идентифицируются по уникальному идентификатору файловой системы, имени диска и расположению устройства, к которому подключен диск.
* udev поддерживает неизменное именование устройств, не зависящее, например, от порядка включения устройств в систему. Конфигурация по умолчанию обеспечивает неизменное именование для накопителей: жесткие диски идентифицируются по уникальному идентификатору файловой системы, имени диска и расположению устройства, к которому подключен диск.
* udev работает целиком в пространстве пользователя. Это приводит, в частности, к тому, что udev может выполнять произвольные программы для составления имени устройства либо его инициализации.
* udev работает целиком в пространстве пользователя. Это приводит, в частности, к тому, что udev может выполнять произвольные программы для составления имени устройства либо его инициализации.
Строка 44: Строка 44:
udev запускается как [[демон (программа)|демон]] и принимает через [[Сокет (программный интерфейс)|сокет]] netlink события uevents от ядра, которые генерируются при инициализации или удалении устройства из системы. Задаваемые пользователем (системой) правила сверяются со свойствами события и соответствующего устройства, и совпавшее правило (которых может быть несколько) может назвать и создать соответствующий файл устройств, а также выполнить другие программы для инициализации и конфигурации устройства. Например, таким образом можно реализовать автоматическое [[Монтирование файловой системы|монтирование]] внешних накопителей при их подключении.
udev запускается как [[демон (программа)|демон]] и принимает через [[Сокет (программный интерфейс)|сокет]] netlink события uevents от ядра, которые генерируются при инициализации или удалении устройства из системы. Задаваемые пользователем (системой) правила сверяются со свойствами события и соответствующего устройства, и совпавшее правило (которых может быть несколько) может назвать и создать соответствующий файл устройств, а также выполнить другие программы для инициализации и конфигурации устройства. Например, таким образом можно реализовать автоматическое [[Монтирование файловой системы|монтирование]] внешних накопителей при их подключении.


Правила могут сверяться по таким свойствам, как конкретная ядерная подсистема, имя устройства в ядре, физическое расположение устройства, либо по серийному номеру устройства. Правила также могут запрашивать информацию при помощи других программ или указать, что имя устройства всегда будет одним и тем же, вне зависимости от порядка обнаружения устройств системой.
Правила могут сверяться по таким свойствам, как конкретная ядерная подсистема, имя устройства в ядре, физическое расположение устройства, либо по серийному номеру устройства. Правила также могут запрашивать информацию при помощи других программ или указать, что имя устройства всегда будет одним и тем же, вне зависимости от порядка обнаружения устройств системой. Правила задаются в файле с произвольным именем, но с суффиксом .rules и находятся в /etc/udev/rules.d/ Существует хорошо описанный [https://habr.com/ru/post/673134/ пример настройки].


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


== Примечания ==
== Примечания ==
{{примечания}}
<references/>

== См. также ==
{{Портал|Свободное программное обеспечение}}


== Ссылки ==
== Ссылки ==

Текущая версия от 17:34, 15 февраля 2024

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 поддерживает неизменное именование устройств, не зависящее, например, от порядка включения устройств в систему. Конфигурация по умолчанию обеспечивает неизменное именование для накопителей: жесткие диски идентифицируются по уникальному идентификатору файловой системы, имени диска и расположению устройства, к которому подключен диск.
  • udev работает целиком в пространстве пользователя. Это приводит, в частности, к тому, что udev может выполнять произвольные программы для составления имени устройства либо его инициализации.

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

[править | править код]

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

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

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

Архитектура

[править | править код]

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

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

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

Примечания

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