Как работает udev/uevent?

В моем QNAP NAS :ssh и

virsh list --all

4
02.11.2019, 16:51
2 ответа

УДЕВ

Udev означает «пространство пользователя /dev» — это диспетчер устройств для ядра Linux. Он является частью systemd(системы init , используемой для начальной загрузкипользовательского пространства и управления пользовательскими процессами).

Первоначально udev был независим от systemd, он был объединен с systemd в 2012 году, это привело к некоторым сложностям при работе дистрибутива без systemd, как описано здесь для gentoo распространение.

Это приложение (udev )предназначено для замены devfsd и hotplug , udev в первую очередь управляет узлами устройств в каталоге /dev. В то же время udev также обрабатывает все события пользовательского пространства, возникающие при добавлении аппаратных устройств в систему или удалении из нее, включая загрузку прошивки в соответствии с требованиями определенных устройств(через модули ядра ). Конкретно udev запускается как systemd service(systemd -udevd.service)для выполнения своих задач, он слушает kernel uevents. Для каждого события systemd -udevd выполняет соответствующие инструкции, указанные вudev rules(/etc/udev/rules.d/ ), подробности о написании правил доступны в этой статье .

На уровне ядра Linux необходимая информация об устройстве экспортируется файловой системой sysfs. Для каждого устройства, обнаруженного и инициализированного ядром,создается каталог с именем устройства. Он содержит файлы атрибутов со специфическими свойствами устройства -. Каждый раз, когда устройство добавляется или удаляется, ядро ​​отправляет uevent, чтобы уведомить udev об изменении.

Поведение демона udev (службы )можно настроить с помощьюudev.conf (5)(/etc/udev/udev.conf ), его параметров командной строки, переменные окружения и в командной строке ядра, или динамически изменяться под управлением udevadm .

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

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

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

Обратите внимание, что другое приложение/демон может прослушивать вызовы uevents через libudev , gudev или напрямую из ядра с помощью GUdevClient

Дополнительная информация о udev доступна в источниках этого ответа:debian wiki , arch linux wiki , opensource.com , дневник гика , freedesktop.org , wikipedia , pks.mpg.de и другие связанные сайты.

Подробная информация об операционных слоях udev объясняется здесь и проиллюстрирована на этой диаграмме:

enter image description here

6
27.01.2020, 21:00

Здесь на reactivated.net/writing _udev _rules я нашел хорошее объяснение. Это с 2003 -по 2006 год.

man udev(systemd )очень сжат. И man systemd-udevd.serviceкороткий. Я думаю, что у udev сложная история, он был интегрирован в systemd и отделился от eudev.

Как и сам systemd, udev настраивается на многих уровнях. «Из коробки» (дистрибутив )должен «заполнять» /dev (Я понимаю -, потому что статические узлы устарели ).

Я вижу три основных варианта использования udev:

  1. "постоянные" имена в /dev/disk/by -... для съемных носителей через SYMLINK=
  2. Сетевые интерфейсы dito. через ИМЯ=
  3. Любое другое событие устройства (клавиатура, USB-гаджеты,... ), для которого требуется (или требуется )автоматизация.

Ваше резюме побудило меня, наконец, подробно узнать об udev. Теперь я вижу связь с записями sysfs (спасибо ), а также нашел разницу между MATCH== и ACTION=...


Я бы дал 100 баллов за хорошее объяснение:

Что делает ядро ​​(плюс такие модули, как USB _хранилище )? (Плюс /etc/fstab?)

А что делает systemd? Какой "удев"?


Я знаю, что в конце концов мне понадобился libinput, чтобы запустить xorg.


man udevadm, подudevadm control -e:

systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd.service

В противном случае перезапускается. Это счастливый конец этого «ответа»;)


Единственное "действие", которое я смог произвести до сих пор :строка в логе:

'systemd-udevd[22327]: Process '...' failed with exit code 1.

0
27.01.2020, 21:00

Теги

Похожие вопросы