Как понять поток обнаружения USB?
Я хотел бы понять поток событий USB из пространства ядра в пространство пользователя (просто из моего любопытства, зная, как все реализовано).
Чтобы быть более понятным, я хотел бы знать, как это всплывающее окно появляется на моем рабочем столе, когда я подключаю USB-накопитель к моей системе, и как его монтируют.
Я также хотел бы знать, как он узнает, присутствуют ли некоторые изображения на моем USB-устройстве, и, если "да", как он спрашивает меня, нужно ли мне открывать его в GIMP или каком-либо другом программном обеспечении?
Я знаю, что это очень большой и широкий вопрос, но, пожалуйста, объясните мне, как понять всю идею, стоящую за ним.
Я не делал больших просмотров кода, но уверяю вас, у меня нет проблем с этим, если я могу руководствоваться правильно.
1 ответ
- Устройство подключено, и программное обеспечение, управляющее аппаратной шиной для этого устройства, получает прерывание (или другое уведомление на аппаратном уровне), а драйвер шины перечисляет подключенные устройства или выполняет другие аппаратные действия для идентификации устройства.
- Ядро запрашивает загрузку драйвера для нового оборудования, вызывая /sbin/modprobe с идентификатором шины / устройства /etc оборудования.
- В пользовательском пространстве 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*
, - как только драйвер устройства загружен (или инициализировано новое устройство, у которого уже был драйвер), драйвер в ядре отправляет уведомление о загруженном устройстве
udev
в пользовательском пространстве. udev
сопоставляет уведомление с его списком правил в/lib/udev/rules.d/
а также/etc/udev/rules.d
, Отсюда, поведение является чрезвычайно специализированным, основанным на правилах.- В случае USB-диска
80-udisks.rules
файл, вероятно, лучшее место для работы. Эти правила будут использовать такие вещи, как blkid и другие помощники для проверки типа и содержимого диска, заполняя все виды значений конфигурации, включая такие вещи, какENV{UDISKS_PRESENTATION_HIDE}="1"
игнорировать диск по какой-то причине. Смотрите "man 7 udisks" для подробностей. - Udisks-daemon отслеживает появление устройств в базе данных udev и представляет их в виде списка устройств, доступных для обнаружения через DBus. (См. "Udisks - перечислить".)
- В udisks настраиваются различные действия, а политику для разрешения этих действий можно увидеть в файле политики
/usr/share/polkit-1/actions/org.freedesktop.udisks.policy
, (Кто может смонтировать, размонтировать и т. Д.) - Сервисы, которые заинтересованы в устройствах, будут прослушивать события DBus от udisks и предпринимать действия, когда видят определенные условия. Например, GNOME Nautilus (через gvfs volume-monitor) будет запрашивать автомонтирование для устройств (через udisks, который проверит свою политику, упомянутую выше).
- После монтирования файловой системы те же службы прослушивания будут выполнять больше действий. Например, Nautilus спросит, хотите ли вы открыть F-Spot, когда общий каталог для хранения фотографий
DCIM
находится в файловой системе.