udev - udev

редактировать
udev
Разработчик (и) Грег Кроа-Хартман и Кей Сиверс
Начальный выпускноябрь 2003 г.; 16 лет назад (2003-11)
Стабильный выпуск 246 (30 июля 2020 г.; 2 месяца назад (2020-07-30))
Репозиторий Отредактируйте это в Викиданных
Написано наC
Операционная система Ядро Linux
Тип Узел устройства
Лицензия GPLv2
Веб-сайтОфициальный веб-сайт

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

Содержание

  • 1 Обоснование
  • 2 Дизайн
  • 3 Обзор
  • 4 Работа
  • 5 История
  • 6 Авторы
  • 7 Ссылки
  • 8 Внешние ссылки

Обоснование

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

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

Дизайн

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

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

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

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

Обзор

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

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

udev в целом разделен на три части:

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

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

Операция

udev была включена в systemd 183

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

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

Раньше обычным способом использования udev в системах Linux было разрешить ему отправлять события через сокет на HAL, который будет выполнять дальнейшие действия, зависящие от устройства. Например, HAL уведомит другое программное обеспечение, работающее в системе, о появлении нового оборудования, отправив широковещательное сообщение по системе D-Bus IPC всем заинтересованным процессам. Таким образом, рабочие столы, такие как GNOME или K Desktop Environment 3, могут запускать файловый браузер для просмотра файловых систем недавно подключенных USB-накопителей . и SD-карты.

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

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

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

Ядро ⟶ udev ⟶ Сетевой менеджер ↽ - - ⇀ D - Автобус ↽ - - ⇀ Firefox {\ displaystyle {\ ce {Ядро ->udev ->Сетевой менеджер <=>D-Bus <=>Firefox}}}{\displaystyle {\ce {Kernel ->udev ->Сетевой менеджер <=>D-Bus <=>Firefox}}}

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 года кодовая база udev была объединена с деревом исходных текстов systemd, что сделало systemd 183 первой версией, включающей udev. В октябре 2012 года Линус Торвальдс раскритиковал Кей Сиверс подход к обслуживанию udev и исправлению ошибок, связанных с загрузкой прошивки, заявив:

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

В 2012 году проект Gentoo Linux создал fork кодовой базы udev systemd, чтобы избежать зависимости от архитектура systemd. Результирующий форк называется eudev и делает функциональность udev доступной без systemd. Заявленная цель проекта - сохранить независимость eudev от каких-либо систем Linux или init. Проект Gentoo описывает eudev следующим образом:

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

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

Авторы

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

Ссылки

Внешние ссылки

  • icon Портал Linux
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Последняя правка сделана 2021-06-20 09:17:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте