Udev - udev

udev
Разработчики)Грег Кроа-Хартман и Кей Сиверс
изначальный выпускНоябрь 2003 г.; 17 лет назад (2003-11)
Стабильный выпуск247 (26 ноября 2020 г.; 22 дней назад (2020-11-26)) [±][1]
Репозиторий Отредактируйте это в Викиданных
Написано вC
Операционная системаЯдро Linux
ТипУзел устройства
ЛицензияGPLv2
Интернет сайтОфициальный веб-сайт

udev (userpace / dev) - диспетчер устройств для Ядро Linux. Как преемник devfsd и hotplug, udev в первую очередь управляет узлы устройства в / dev каталог. В то же время udev также обрабатывает все пространство пользователя события, возникающие, когда аппаратные устройства добавляются в систему или удаляются из нее, в том числе прошивка загрузка в соответствии с требованиями определенных устройств.

Обоснование

Это Операционная система с ядро который отвечает за предоставление абстрактного интерфейса оборудования для остального программного обеспечения. Быть монолитное ядро, то Ядро Linux делает именно это, и драйверы устройств являются частью ядра Linux, составляющего более 50% его исходного кода.[2] Доступ к оборудованию можно получить через системные вызовы или над их узлы устройства.

Уметь работать с периферийными устройствами, которые горячая вилка -способен удобным для пользователя способом, часть обработки всех этих аппаратных устройств с возможностью горячего подключения была передана от ядра к демон работает в пользовательском пространстве. Запуск в пользовательском пространстве служит целям безопасности и стабильности.

Дизайн

Драйверы устройств являются частью ядра Linux, в основные функции которого входят обнаружение устройств, обнаружение изменений состояния устройства и аналогичные низкоуровневые аппаратные функции. После загрузки драйвера устройства в память из ядра обнаруженные события отправляются демону пользовательского пространства udevd. Это диспетчер устройств, udevd, который фиксирует все эти события и затем решает, что будет дальше. За это, udevd имеет очень полный набор файлов конфигурации, которые могут быть настроены администратором компьютера в соответствии со своими потребностями.

  • Если новое запоминающее устройство подключено через USB, udevd получает уведомление от ядра и само уведомляет udisksd-daemon. Затем этот демон сможет смонтировать файловые системы.
  • Если к сетевой карте Ethernet подключен новый кабель Ethernet, udevd уведомляется ядром и само уведомляет NetworkManager-daemon. Демон NetworkManager может запустить dhclient для этого сетевого адаптера или настроить его в соответствии с ручной настройкой.

Сложность этого заставляет авторов приложений заново реализовывать логику поддержки оборудования. Некоторым аппаратным устройствам также требуются привилегированные вспомогательные программы для их подготовки к использованию. Их часто нужно вызывать способами, которые может быть неудобно выразить с помощью модели разрешений Unix (например, разрешая пользователям присоединяться к беспроводные сети только если они вошли в видеопанель). Авторы приложений прибегают к использованию Setuid двоичные файлы или запустить службу демоны чтобы обеспечить собственный контроль доступа и разделение привилегий, каждый раз потенциально создавая дыры в безопасности.[3]

HAL был создан для решения этой проблемы, но теперь не рекомендуется в большинстве дистрибутивов Linux.

Обзор

В отличие от традиционных Unix системы, где узлы устройства в / dev каталог были статическим набором файлов, диспетчер устройств Linux udev динамически предоставляет только узлы для устройств, фактически присутствующих в системе. Несмотря на то что devfs используется для обеспечения аналогичной функциональности, Грег Кроа-Хартман привел ряд причин[4] для предпочтения udev над devfs:

  • udev поддерживает постоянное именование устройств, которое не зависит, например, от порядка, в котором устройства подключены к системе. Настройка udev по умолчанию предоставляет постоянные имена для устройств хранения. Любой жесткий диск распознается по уникальному идентификатору файловой системы, имени диска и физическому расположению на оборудовании, к которому он подключен.
  • udev полностью выполняется в пространство пользователя, в отличие от devfs пространство ядра. Одним из следствий этого является то, что udev переместил политику именования из ядра и может запускать произвольные программы для составления имени для устройства из свойств устройства до создания узла; там весь процесс также прерывается и выполняется с более низким приоритетом.

Удев в целом делится на три части:

  • Библиотека либудев что позволяет получить доступ к информации об устройстве; он был включен в systemd 183 комплект программного обеспечения.[5]
  • Пользовательское пространство демон udevd который управляет виртуальным / dev.
  • Административный командная строка полезность udevadm для диагностики.

Система получает вызовы от ядра через netlink разъем. Использовались более ранние версии горячая вилка, добавив ссылку на себя в /etc/hotplug.d/default с этой целью.

Операция

udev был включен в systemd 183[5]

udev - это общий менеджер устройств, работающий как демон в системе Linux и прослушивание (через netlink socket) для uevents, ядро ​​отправляет сообщение, если новое устройство инициализировано или устройство удалено из системы. Пакет udev содержит обширный набор правил, которые соответствуют экспортированным значениям события и свойствам обнаруженного устройства. Правило сопоставления, возможно, назовет и создаст узел устройства и запустит настроенные программы для установки и настройки устройства.

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

Раньше распространенным способом использования udev в системах Linux было разрешить ему отправлять события через сокет на HAL, который будет выполнять дальнейшие действия, зависящие от устройства. Например, HAL уведомит другое программное обеспечение, работающее в системе, о появлении нового оборудования, отправив широковещательное сообщение на D-автобус МПК система всем заинтересованным процессы. Таким образом, рабочие столы, такие как ГНОМ или же K Среда рабочего стола 3 может начать файловый браузер для просмотра файловых систем только что прикрепленных USB-накопители и SD-карты.[6]

К середине 2011 года HAL был объявлен устаревшим в большинстве дистрибутивов Linux, а также в KDE, GNOME.[7] и Xfce[8] окружения рабочего стола, среди прочего. Функциональность, ранее воплощенная в HAL, была интегрирована в сам udev или перенесена в отдельное программное обеспечение, такое как udisks и Upower.

  • udev обеспечивает низкоуровневый доступ к дереву устройств Linux. Позволяет программам перечислять устройства и их свойства и получать уведомления, когда устройства приходят и уходят.
  • dbus - это среда, позволяющая программам безопасно и надежно обмениваться данными друг с другом с помощью высокоуровневого объектно-ориентированного программного интерфейса.
  • udisks (ранее известный как DeviceKit-disks) - это демон, который находится поверх libudev и других интерфейсов ядра и предоставляет высокоуровневый интерфейс для устройств хранения и доступен для приложений через dbus.
  • upower (ранее известный как DeviceKit-power) - это демон, который находится поверх libudev и других интерфейсов ядра и предоставляет высокоуровневый интерфейс для управления питанием и доступен для приложений через dbus.
  • Сетевой менеджер - это демон, который находится поверх libudev и других интерфейсов ядра (и пары других демонов) и предоставляет высокоуровневый интерфейс для конфигурации и настройки сети и доступен для приложений через dbus.[9]

udev получает сообщения от ядра и передает их демонам подсистем, таким как Network Manager. Приложения общаются с Network Manager через D-Bus.

HAL устарел и используется только в устаревшем коде. Ubuntu 10.04 поставляется без HAL. Первоначально планировалось, что новый демон DeviceKit заменит определенные аспекты HAL, но в марте 2009 года DeviceKit был объявлен устаревшим и был добавлен в udev тот же код в виде пакета: udev-extras, а некоторые функции теперь переместились в udev.

История

udev был представлен в Linux 2.5. В ядре Linux версии 2.6.13 представлена ​​или обновлена ​​новая версия событие интерфейс. Система, использующая новую версию udev, не будет загружаться с ядрами старше 2.6.13, если udev не отключен и не установлен традиционный / dev каталог используется для доступа к устройству.

В апреле 2012 г. кодовая база был объединен с systemd дерево исходных текстов, что делает systemd 183 первой версией, включающей udev.[5][10][11] В октябре 2012 г. Линус Торвальдс критиковали Кей Сиверс подход к обслуживанию udev и исправлению ошибок, связанных с прошивка загрузка, указав:[12]

Да, делать это в ядре «надежнее». Но не играйте в игры и перестаньте лгать. Он более надежен, потому что у нас есть заботливые специалисты по сопровождению, и потому, что мы знаем, что регрессия - это не то, с чем мы можем играть быстро и свободно. Если что-то сломается, и мы не знаем, как исправить эту поломку, мы возвращаться вещь, которая сломалась. Так что да, нам явно лучше делать это в ядре. Не потому, что загрузка прошивки не может выполняться в пользовательском пространстве. Но просто потому, что обслуживание udev с тех пор, как Грег отказалось от него, пошло под откос.

В 2012 г. Gentoo Linux проект создал вилка кодовой базы udev systemd, чтобы избежать зависимости от архитектуры systemd. Получившаяся вилка называется Евдев и это делает функциональность udev доступной без systemd. Заявленная цель проекта - сохранить независимость eudev от каких-либо Дистрибутив Linux или же в этом система.[13] Проект Gentoo описывает eudev следующим образом:[14]

eudev - это ответвление systemd-udev, целью которого является улучшение совместимости с существующим программным обеспечением, таким как OpenRC и Выскочка, старые ядра, различные инструменты и все, что требуется пользователям и различным дистрибутивам.

29 мая 2014 года в systemd была прекращена поддержка загрузки прошивки через udev, так как было решено, что загрузка прошивки является задачей ядра.[15] Спустя два дня, Леннарт Поеттеринг предложил отложить этот патч до kdbus начинает использоваться udev; на этом этапе планируется переключить udev на использование kdbus в качестве базовой системы обмена сообщениями и избавиться от транспорта на основе сетевых ссылок между пользовательским пространством.[16]

Авторы

udev был разработан Грег Кроа-Хартман и Кей Сиверс, с большой помощью Дэн Стеклофф, среди прочего.

Рекомендации

  1. ^ Выпуск v247, 26 ноября 2020, получено 27 ноября 2020
  2. ^ Марти, Дон. «Неужели ведущие разработчики Linux теряют желание писать код?». ComputerworldUK. Получено 2016-06-19.
  3. ^ Пеннингтон, Havoc (10.07.2003), Заставляем оборудование просто работать
  4. ^ Грег Кроа-Хартман. «udev и devfs - последнее слово». Архивировано из оригинал (Простой текст ) на 2011-07-09. Получено 2008-01-24.
  5. ^ а б c "systemd / systemd". GitHub. Получено 2016-08-21.
  6. ^ «Динамическое управление устройствами в Udev» (PDF). Журнал Linux. 2006-10-01. Получено 2008-07-14.
  7. ^ "HALRemoval". 2011-06-28. Получено 2011-09-13.
  8. ^ "Тунар-волман и отказ от HAL в Xfce". 2010-01-17. Получено 2017-12-25.
  9. ^ Леннарт Поеттеринг (25 апреля 2010 г.). "Связь между udev, hal, Dbus и DeviceKit?".
  10. ^ Сиверс, Кей (2012-04-03). "Будущее дерева исходных кодов udev". linux-hotplug (Список рассылки). Получено 2013-05-22.
  11. ^ Сиверс, Кей, "Фиксация импорта udev в systemd", systemd, получено 2013-05-22
  12. ^ Линус Торвальдс (03.10.2012). "Re: udev поломки". Linux-ядро (Список рассылки). Получено 2014-10-28.
  13. ^ "gentoo / eudev - README.md". Получено 2017-12-25.
  14. ^ «Проекты Gentoo Linux - проект Gentoo eudev». Получено 2017-12-25.
  15. ^ "[systemd-devel] [PATCH] Сбросьте загрузчик прошивки udev". 2014-05-29.
  16. ^ "[systemd-devel] [PATCH] Сбросьте загрузчик прошивки udev". 2014-05-31.

внешняя ссылка