Як зрозуміти потік розпізнавання USB?


14

Я хотів би зрозуміти потік подій USB з простору ядра до простору користувача (просто з моєї цікавості, знаючи, як все реалізується).

Щоб було більш зрозуміло, я хотів би знати, як це спливаюче вікно з’являється на моєму робочому столі, коли я підключаю USB-накопичувач до своєї системи та як накопичується привід.

Я також хотів би дізнатися, як це дізнається, чи є деякі зображення в моєму USB, і якщо "так", то як він запитує, чи потрібно мені відкривати його в GIMP чи іншому програмному забезпеченні?

Я знаю, що це дуже велике і широке питання, але, будь ласка, попросіть мене з деякими вказівками, як зрозуміти всю ідею, що стоїть за ним.

Я не робив великих переглядів кодів, але запевняю, що у мене немає проблем, якщо я можу правильно керуватися.

Відповіді:


16
  1. Пристрій підключено до мережі, а програмне забезпечення, яке управляє апаратною шиною для цього пристрою, отримує перерву (або інше повідомлення на апаратному рівні), а драйвер шини перераховує підключені пристрої або виконує інші специфічні для шини апаратні дії для ідентифікації пристрою.
  2. Ядро просить завантажити драйвер для нового обладнання за допомогою виклику / sbin / modprobe за допомогою ідентифікатора шини / пристрою / тощо.
  3. У просторі користувача modprobe намагається знайти відповідний псевдонім, визначений драйвером. (Див /lib/modules/$(uname -r)/modules.alias. Повний список.) Вони будуть виглядати інакше залежно від апаратного інтерфейсу. Наприклад, pci:v0000102Bd00002527sv*sd*bc*sc*i*для постачальника 102I пристроїв PCI, пристрою 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"ігнорувати диск чомусь. Докладніше див. У "людина 7 удисок".
  7. Udisks-демон годин для пристроїв з'являться в Udev базі даних, і представляє їх їх в якості відкривається списку пристроїв по DBus. (Див. "Удиски - перерахувати".)
  8. У удісках налаштовані різні дії , а політика дозволу цих дій можна побачити у файлі політики /usr/share/polkit-1/actions/org.freedesktop.udisks.policy. (Хто може монтувати, мандрувати тощо)
  9. Служби, які цікавляться пристроями, слухатимуть події DBus з udisks та вживатимуть дій, коли вони бачать певні умови. Наприклад, Nautilus (через монітор томів gvfs) GNOME буде вимагати автоматичного набору пристроїв (через udisks , які перевірять його політику, згадану вище).
  10. Після встановлення файлової системи ті самі служби прослуховування вживатимуть більше дій. Наприклад, Nautilus запитає, чи бажаєте ви відкрити F-Spot, коли загальний каталог зберігання фотографій DCIMзнайдеться у файловій системі.

1
Може бути, ви знаєте, чим це відрізняється під час завантаження (я припускаю, що лише крок 1 відрізняється)? Чому пристрій не можна було виявити під час завантаження, а правильно завантажити після ручного відключення?
naktinis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.