Разработчик (и) | Грег Кроа-Хартман и Кей Сиверс |
---|---|
Начальный выпуск | ноябрь 2003 г.; 16 лет назад (2003-11) |
Стабильный выпуск | 246 (30 июля 2020 г.; 2 месяца назад (2020-07-30)) |
Репозиторий | |
Написано на | C |
Операционная система | Ядро Linux |
Тип | Узел устройства |
Лицензия | GPLv2 |
Веб-сайт | Официальный веб-сайт |
udev (userspace / dev) - менеджер устройств для ядра Linux. Как преемник devfsd и горячего подключения, udev в первую очередь управляет узлами устройств в каталоге /dev . В то же время udev также обрабатывает все события пользовательского пространства, возникающие при добавлении или удалении аппаратных устройств в систему, включая загрузку микропрограмм по требованию определенных устройств.
Это ядро операционной системы , которое отвечает за предоставление абстрактного интерфейса оборудования для остального программного обеспечения. Будучи монолитным ядром, ядро Linux делает именно это, а драйверы устройств являются частью ядра Linux, составляющего более 50% его исходного кода. код. Доступ к оборудованию можно получить через системные вызовы или через их узлы устройств.
. Чтобы иметь возможность работать с периферийными устройствами, поддерживающими hotplug удобным для пользователя способом, часть обработки всех этих аппаратных устройств с возможностью горячей замены была передана от ядра демону, работающему в пользовательском пространстве. Запуск в пользовательском пространстве служит целям безопасности и стабильности.
Драйверы устройств являются частью ядра Linux, в котором их основные функции включают обнаружение устройств, обнаружение изменений состояния устройства и аналогичные низкоуровневые аппаратные функции. После загрузки драйвера устройства в память из ядра обнаруженные события отправляются демону пользовательского пространства udevd. Это диспетчер устройств udevd, который улавливает все эти события и затем решает, что будет дальше. Для этого udevd имеет очень полный набор файлов конфигурации, которые могут быть настроены администратором компьютера в соответствии со своими потребностями.
Сложность этого заставляет авторов приложений заново реализовать логику поддержки оборудования. Некоторым аппаратным устройствам также требуются привилегированные вспомогательные программы для их подготовки к использованию. Их часто приходится вызывать способами, которые может быть неудобно выразить с помощью модели разрешений Unix (например, разрешая пользователям присоединяться к беспроводным сетям только в том случае, если они вошли в консоль видео). Авторы приложений прибегают к использованию двоичных файлов setuid или запускают сервисы демонов, чтобы обеспечить собственный контроль доступа и разделение привилегий, каждый раз потенциально создавая дыры в безопасности.
HAL был создан для справиться с этим, но теперь не рекомендуется в большинстве дистрибутивов Linux.
В отличие от традиционных систем Unix, где узлы устройств в каталоге / devбыли статическим набором файлов, диспетчер устройств Linux udev динамически предоставляет только узлы для устройств, фактически присутствующих в системе. Хотя devfs использовалось для обеспечения аналогичной функциональности, Грег Кроа-Хартман привел ряд причин, по которым udev предпочтительнее devfs:
udev в целом разделен на три части:
Система получает вызовы от ядра через сокет netlink. Использовались более ранние версии, с этой целью добавлялась ссылка на себя в /etc/hotplug.d/default.
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 получает сообщения от ядро и передает их в subsys Темные демоны, такие как 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 года кодовая база 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 был разработан Грегом Кроа-Хартманом и Кей Сиверс, в том числе при большой помощи со стороны других.