Jak zrozumieć przepływ wykrywania USB?

14

Chciałbym zrozumieć przepływ zdarzeń USB z przestrzeni jądra do przestrzeni użytkownika (po prostu z mojej ciekawości, wiedząc, jak rzeczy są realizowane).

Aby być bardziej zrozumiałym, chciałbym wiedzieć, jak to wyskakujące okienko pojawia się na moim pulpicie po podłączeniu dysku USB do mojego systemu i w jaki sposób dysk jest montowany.

Chciałbym również dowiedzieć się, w jaki sposób sprawdza, czy niektóre obrazy są obecne na moim USB, a jeśli „tak”, w jaki sposób pyta mnie, czy muszę je otworzyć w GIMP lub innym oprogramowaniu?

Wiem, że to bardzo duże i szerokie pytanie, ale proszę o wskazówki, jak zrozumieć cały ten pomysł.

Nie robiłem dużych przeglądów kodu, ale zapewniam cię, że nie mam problemu, jeśli mogę być prowadzony poprawnie.

Sen
źródło

Odpowiedzi:

16
  1. Urządzenie jest podłączone, a oprogramowanie zarządzające magistralą sprzętową dla tego urządzenia odbiera przerwanie (lub inne powiadomienie na poziomie sprzętowym), a sterownik magistrali wylicza podłączone urządzenia lub wykonuje inne specyficzne dla magistrali działania sprzętowe w celu identyfikacji urządzenia.
  2. Jądro żąda załadowania sterownika dla nowego sprzętu, wywołując / sbin / modprobe z identyfikatorem magistrali / urządzenia / etc sprzętu.
  3. W przestrzeni użytkownika modprobe próbuje znaleźć pasujący alias określony przez sterownik. (Zobacz /lib/modules/$(uname -r)/modules.aliaspełną listę.) Będą wyglądać inaczej w zależności od interfejsu sprzętowego. Na przykład, pci:v0000102Bd00002527sv*sd*bc*sc*i*dla urządzenia PCI dostawcy 102b urządzenia 2527 i coś dla subvendor, itp, lub USB: usb:v2040p4982d*dc*dsc*dp*ic*isc*ip*.
  4. po załadowaniu sterownika urządzenia (lub zainicjowaniu nowego urządzenia, które już miało sterownik) sterownik w jądrze wysyła powiadomienie o załadowanym urządzeniu do udevprzestrzeni użytkownika.
  5. udevdopasowuje powiadomienie do listy reguł w /lib/udev/rules.d/i /etc/udev/rules.d. Odtąd zachowanie jest wyjątkowo wyspecjalizowane, oparte na zasadach.
  6. W przypadku dysku USB 80-udisks.rulesplik jest prawdopodobnie najlepszym miejscem do pracy. Reguły te będą używać rzeczy takich jak blkid i inne pomocniki do badania typu i zawartości dysku, wypełniając wszelkiego rodzaju wartości konfiguracyjne, w tym np. IgnorowanieENV{UDISKS_PRESENTATION_HIDE}="1" dysku z jakiegoś powodu. Zobacz „man 7 udisks” po szczegóły.
  7. Udisks-demon zegarki na urządzenia do stawienia się w udev bazie danych i prezentuje je je jako wykrycie liście urządzeń ponad DBus. (Zobacz „udisks --enumerate”.)
  8. Różne akcje są skonfigurowane w udiskach , a zasady zezwalania na te akcje można zobaczyć w pliku strategii /usr/share/polkit-1/actions/org.freedesktop.udisks.policy. (Kto może zamontować, umount itp.)
  9. Usługi zainteresowane urządzeniami będą nasłuchiwać zdarzeń DBus z udisk i podejmą działania, gdy zobaczą określone warunki. Na przykład GNU Nautilus (przez gvfs volume-monitor) zażąda automatycznego montowania urządzeń (przez udisk , które sprawdzą jego zasady, wspomniane powyżej).
  10. Po zamontowaniu systemu plików te same usługi nasłuchiwania podejmą więcej działań. Na przykład Nautilus zapyta, czy chcesz otworzyć F-Spot, gdy wspólny katalog przechowywania zdjęć DCIMzostanie znaleziony w systemie plików.
Kees Cook
źródło
1
Może wiesz, jak to się różni podczas rozruchu (zakładam, że tylko krok 1 jest inny)? Dlaczego urządzenie nie może zostać wykryte podczas rozruchu, ale poprawnie się ładuje po ręcznym ponownym uruchomieniu?
naktinis,