Что происходит при подключении USB-накопителя?


21

Каков поток событий USB из пространства ядра в пространство пользователя? У меня на рабочем столе появляется всплывающее окно, когда я подключаю USB-накопитель - какова последовательность событий, которая ведет от обнаружения нового USB-накопителя до его монтажа и показа этого всплывающего окна?

Ответы:


6

Это передается udevв современных системах Linux. udevДемон начал с системой будет искать /etc/udev/rules.dи /lib/udev/rules.dи будет работать правила соответствия для событий ядра. Вставка USB-накопителя вызовет событие, udevвыполнит поиск соответствующего правила и выполнит его.

Сами правила будут определять, что делает ваша система. В последние годы udevсвязался с HAL, который будет оповещать приложения через DBUS. Этот подход в настоящее время устарел в пользу унифицированного udevрешения, которое, как я полагаю, будет включать udevdобщение dbusнапрямую или через dbus-send .

Вы можете отслеживать деятельность udevчерез udevadm monitor.


2

Я еще не совсем уверен в этом, так что возьмите его с собой и немного исследований.

Он начинается с подсистемы горячего подключения ядра. После настройки устройства оно либо вызывает любую пользовательскую программу, настроенную для обработки событий горячего подключения (если она была установлена echo hotplug_handler > /proc/sys/kernel/hotplug), либо отправляет пакет данных через сокет netlink kobject_uevent. Когда ядро ​​запускает обработчик горячего подключения, он устанавливает некоторые переменные среды. Когда ядро ​​отправляет пакет данных, оно включает пары ключ = значение. Если вы хотите, вы можете установить скрипт, который просто регистрирует среду и устанавливает ее в качестве обработчика (конечно, не в вашей производственной системе - тестовая установка).

Обычно udev настраивается как обработчик, и у него будет несколько правил для настройки обработки событий. Оттуда он может запускать другие программы, которые делают другие вещи (например, выдают сообщения dbus). Эти правила udev сильно зависят от конкретного распределения интересов.

В этой теме много информации, где кто-то пытается написать какую-то документацию - обратите внимание, что первое сообщение не является точным; Продолжай читать.


2
Когда-то это было точно, но ненадолго: современные udevслушают события в сокете netlink. (У старого способа были проблемы с сериализацией / параллелизмом.)
ephemient

Поскольку я новичок в этой части Linux ( udev , hotplug ), я хотел бы иметь представление о каждой строке, которую вы описали здесь. Так что не могли бы вы рассказать о запуске с подсистемой hotplug ядра .
Сен

@ephemient: Спасибо за ответ. Не могли бы вы объяснить последовательность событий.
Сен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.