USB-Traffic abhören

Mario2

Member
Hallo Board,

gibt es eine Möglichkeit, das was über einen USB-Port an Daten geht, abzufangen und in eine Datei bzw. nach stdout zu schreiben?

Ziel ist es letztendlich, zu untersuchen, was passiert wenn man einen Knopf an meinem Scanner drückt, um diesen dann unterstützen zu können.

Danke im Voraus
Mario
 
außer debugging auf treiber eben geht da nichts glaube ich.
aber du kannst ja einfach mal ein cat auf das device versuchen und gucken was rauskommt (ob was rauskommt) beim drücken des knöpfchens.
 
Danke, das werde ich mal probieren, kann's aber erst Montag testen.

Wenn es nur auf Treiberebene geht, dann ist das auch nicht schlimm. Dann mache ich's eben auf Treiberebene ;). Ich weiß nur nicht, welche Dateien für die Kommunikation verantwortlich sind. Es gibt ja z.B. einen usbd. Der macht aber auf mich den Eindruck, als wäre der nur für's an- und abstöpseln der Geräte zuständig. Vielleicht kann mir da noch jemand einen Tipp geben, in welcher Headerdatei ich für den Datenstrom fündig werde.
 
Ich würde Dir empfehlen, falls noch nicht getan, Dich intensiv mit USB zu beschäftigen oder zumindest die Einführungs-Kapitel des USB Standards zu lesen.

USB ist eine mehrschichtige Angelegenheit, also zwischen Busebene und funktionaler Ebene liegt ein ganzer Haufen Kram.

Viele Geräteklassen in USB sollen durch generische Treiber unterstützt werden, indem sie Deskriptoren (ähnlich des PCI Config Space, aber umfangreicher) bereit stellen. Das ist z.B. der Grund warum die Grundfunktionen von USB-Mäusen oder -Tastaturen ohne besondere Treiberunterstützung einfach funktionieren.

Die Umsetzung der Deskriptoren sowohl in Hardware als auch die Parser in Software ist aber teils mangelhaft, teils falsch und teils Interpretationssache. Was "über's Kabel" geht ist eigentlich vollkommen wurschd. Bei HIDs, also Eingabegeräten, werden softwareseitig Events generiert, automatisch vom USB Stack. Man kann dann Eventhandler registrieren und so z.B. gedrückte Buttons abfangen bzw. bearbeiten. Bestimmt gibt es bei Scannern auch standardisierte Deskriptoren und Du brauchst um Deinen Scanner zu unterstützen nur die "Bedienung" des USB Stacks zu lernen.
 
na wenn kein treiber für das gerät läuft wirds glaube ich von einem den usb*-device-nodes verwaltet. falls es erkannt wird ordnet der treiber dem gerät eine uscanner* device node zu.
aber da dürfte dann halt auch nur sachen landen, die vom treiber unterstützt werden was ja anscheinend bei dem knopf nicht der fall ist. außerdem wirst du auf dem device nicht cat'en können wenn z.b. von sane oder so verwaltet wird...
 
Danke Vega, klasse Antwort. Das hört sich ja recht abenteuerlich an. Ich hatte natürlich insgeheim gehofft, dass die grundsätzliche Kommunikation so von FreeBSD bereitgestellt wird, dass man nur noch einen Wert abfangen und die auszuführende Aktion schreiben muss.
 
aber da dürfte dann halt auch nur sachen landen, die vom treiber unterstützt werden was ja anscheinend bei dem knopf nicht der fall ist.
Eben. Und dieser Umstand soll sich ja verbessern. Vermutlich ist dr Aufwand sehr hoch, aber ich möchte mir zumindest einmal ein Bild machen können, was alles nötig wäre, um den Treiber anzupassen oder irgendeine andere Krücke zu basteln.
 
Danke Vega, klasse Antwort. Das hört sich ja recht abenteuerlich an. Ich hatte natürlich insgeheim gehofft, dass die grundsätzliche Kommunikation so von FreeBSD bereitgestellt wird, dass man nur noch einen Wert abfangen und die auszuführende Aktion schreiben muss.

Das ist zumindest die Grundidee von den USB Geräteklassen.

Man muss allerdings sagen, dass der USB-Stack in den BSDs recht unvollständig ist, was daran liegt, dass USB saukomplex und hier und da etwas overengineered ist. Möglicherweise präsentiert sich Dein Scanner als Scanner+HID, also als ein physikalisches Gerät mit mehreren Funktionen, ich glaube da sieht's in BSD schlecht aus (kann mich da aber durchaus irren).
 
Hallo mario2,

einer schöner artikel hierzu findest du bei wikipedia muss zwar noch etwas ergänzt werden aber dennoch lesenswert:

http://de.wikipedia.org/wiki/Universal_Serial_Bus

also muss zugeben das wusste ich vorher auch nicht das

----------------------------------------------

Auzug Wikipedia:

NetBSD, FreeBSD und OpenBSD unterstützen UHCI, OHCI und EHCI sowie gängige Endgeräte. NetBSD war 1998 das erste freie Betriebssystem mit USB-Unterstützung.
war..

------------------------------------

salü nicolas
 
Danke Nicolas. Den Wikipadia-Artikel hatte ich gestern auch noch gefunden (ist ja eigentlich auch nicht schwierig ;)). Interessant sind vor allem auch die Links am Ende des Artikels.

Danke auch dir, BrainPain. Ich werde mir den Artikel heute ansehen.

Insgesamt bewahrheitet sich bisher das, was hier gesagt wurde: USB ist nicht trivial. Mal sehen, ob ich genug Zeit aufbringen kann, um mich da reinzuwühlen.
 
Zurück
Oben