Ich habe versucht, einen einfachen Gerätetreiber zu schreiben, in dem ich die Hersteller-ID und Produkt-ID programmgesteuert abholen soll. Nachdem ich fast alle notwendigen Header-Dateien durchgespielt habe, bin ich zu dem Schluss gekommen, dass ich auf die Hersteller-ID, Produkt-ID und Herstellerdetails des USB Gerät durch eine Struktur: struct usb_device{}
, die ein Mitglied struct usb_device_descriptor{}
hat. Diese verschachtelte Struktur hat idVendor, idProduct
und iManufacturer
und einige andere Mitglieder.
Aber irgendwie kann ich aus irgendeinem Grund nicht auf diese Member zugreifen. Wenn ich nach dem Einfügen eines Moduls dmesg
mache, werden einige Werte für den Papierkorb ausgegeben. Ich würde mich freuen, Hilfe oder Hinweise oder eine Antwort zu erhalten. Das Folgende ist der Code, den ich bisher geschrieben habe:
P.S .: Notwendige Einschlüsse wurden gemacht.
Nachdem ich fast alle notwendigen Header-Dateien gelesen habe, weiß ich, dass ich über eine Struktur auf die Hersteller-ID, die Produkt-ID und die Herstellerdetails des USB-Geräts zugreifen kann: struct usb_device{}
mit einem Mitglied struct usb_device_descriptor{}
. Diese verschachtelte Struktur hat idVendor, idProduct
und iManufacturer
und einige andere Mitglieder.
Ich denke, das obige ist der vollständige Code für Ihr Kernelmodul. Wie auch immer, Sie verwenden korrekte Strukturen und Hersteller-ID, Geräte-ID wird im Geräte-Deskriptor verfügbar sein. Weitere Informationen zu Deskriptoren finden Sie .
Ich empfehle Ihnen, den Kernel-Code hier zu nennen.
Update 1:
Das folgende Programm gibt Ihnen Informationen über die im System verfügbaren HUBs. Das Makro usb_hub_for_each_child wird in der Kernelversion 3.2.0 nicht unterstützt, wird jedoch in den neuesten Versionen 3.7.x unterstützt.
usb_bus_list
wird in #include <linux/usb/hcd.h>
deklariert.
Ausgabe ist
%Vor%Nachdem ich einige Zeit damit verbracht habe, Header-Dateien zu untersuchen, habe ich es zum Laufen gebracht. Es war einfach, nur dass ich mir nicht vorstellen konnte, was geschah und wie es geschah. Ich würde gerne all den Leuten danken, die darauf gepostet / geantwortet haben. Hier ist der aktualisierte Beispielcode, so dass jemand wie ich, der ein Neuling ist, nur darauf verweisen kann. Es ist jedoch keine perfekte Referenz, ich würde es lieben, wenn jemand mit Vorschlägen und Änderungen kommt. Danke!
%Vor%Tags und Links c linux-device-driver usb