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

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

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

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

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

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

14
задан 22 December 2010 в 05:16

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 --enumerate».)
  8. В настроены различные действия , а политику для разрешения этих действий можно увидеть в файле политики /usr/share/polkit-1/actions/org.freedesktop.udisks.policy. (Кто может монтировать, размонтировать и т. Д.)
  9. Сервисы, которые заинтересованы в устройствах, будут прослушивать события DBus от udisks и предпринимать действия, когда видят определенные условия. Например, GNOME Nautilus (через gvfs volume-monitor) будет запрашивать автомонтирование для устройств (через udisks , который проверит свою политику, упомянутую выше).
  10. После монтирования файловой системы те же службы прослушивания будут выполнять больше действий. Например, Наутилус спросит, хотите ли вы открыть F-Spot , когда в файловой системе найден общий каталог для хранения фотографий DCIM.
0
ответ дан 22 December 2010 в 05:16

Другие вопросы по тегам:

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