Как понять поток обнаружения USB?

Я хотел бы понять поток событий USB из пространства ядра в пространство пользователя (просто из моего любопытства, зная, как все реализовано).

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

Я также хотел бы знать, как он узнает, присутствуют ли некоторые изображения на моем USB-устройстве, и, если "да", как он спрашивает меня, нужно ли мне открывать его в GIMP или каком-либо другом программном обеспечении?

Я знаю, что это очень большой и широкий вопрос, но, пожалуйста, объясните мне, как понять всю идею, стоящую за ним.

Я не делал больших просмотров кода, но уверяю вас, у меня нет проблем с этим, если я могу руководствоваться правильно.

1 ответ

Решение
  1. Устройство подключено, и программное обеспечение, управляющее аппаратной шиной для этого устройства, получает прерывание (или другое уведомление на аппаратном уровне), а драйвер шины перечисляет подключенные устройства или выполняет другие аппаратные действия для идентификации устройства.
  2. Ядро запрашивает загрузку драйвера для нового оборудования, вызывая /sbin/modprobe с идентификатором шины / устройства /etc оборудования.
  3. В пользовательском пространстве modprobe пытается найти соответствующий псевдоним, указанный драйвером. (Увидеть /lib/modules/$(uname -r)/modules.alias для полного списка.) Они будут выглядеть по-разному в зависимости от аппаратного интерфейса. Например, pci:v0000102Bd00002527sv*sd*bc*sc*i* для поставщика устройства PCI 102B, устройства 2527 и всего, что связано с субвендором и т. д., или USB: usb:v2040p4982d*dc*dsc*dp*ic*isc*ip*,
  4. как только драйвер устройства загружен (или инициализировано новое устройство, у которого уже был драйвер), драйвер в ядре отправляет уведомление о загруженном устройстве udev в пользовательском пространстве.
  5. udev сопоставляет уведомление с его списком правил в /lib/udev/rules.d/ а также /etc/udev/rules.d, Отсюда, поведение является чрезвычайно специализированным, основанным на правилах.
  6. В случае USB-диска 80-udisks.rules файл, вероятно, лучшее место для работы. Эти правила будут использовать такие вещи, как blkid и другие помощники для проверки типа и содержимого диска, заполняя все виды значений конфигурации, включая такие вещи, как ENV{UDISKS_PRESENTATION_HIDE}="1" игнорировать диск по какой-то причине. Смотрите "man 7 udisks" для подробностей.
  7. Udisks-daemon отслеживает появление устройств в базе данных udev и представляет их в виде списка устройств, доступных для обнаружения через DBus. (См. "Udisks - перечислить".)
  8. В udisks настраиваются различные действия, а политику для разрешения этих действий можно увидеть в файле политики /usr/share/polkit-1/actions/org.freedesktop.udisks.policy, (Кто может смонтировать, размонтировать и т. Д.)
  9. Сервисы, которые заинтересованы в устройствах, будут прослушивать события DBus от udisks и предпринимать действия, когда видят определенные условия. Например, GNOME Nautilus (через gvfs volume-monitor) будет запрашивать автомонтирование для устройств (через udisks, который проверит свою политику, упомянутую выше).
  10. После монтирования файловой системы те же службы прослушивания будут выполнять больше действий. Например, Nautilus спросит, хотите ли вы открыть F-Spot, когда общий каталог для хранения фотографий DCIM находится в файловой системе.
Другие вопросы по тегам