USB HID

  • Hallo an die- oder diejenige die mir weiter helfen könnte/wird.


    Vorab nach 1/2 Jahr Arbeit (ist ein umfangreiches Projekt) an einem PI3 (Hardware,Software), stoße ich jetzt auf ein Programmierproblem.:conf:

    Die gesamte Software ist in C geschrieben. Nun muss noch zum Abschluss ein USB-HID angeschlossen werden.


    Bei der Festlegung (Projektplannung) ob ein PI3 das USB-HID Gerät versteht habe ich, recht schnell und mit Erfolg

    das Softwarepaket (in C++) von : Alan Ott, Signal 11 Software, Windows HID simplification, genutzt.:bravo2:


    Das Paket, jetzt in meine Software einzubinden, ist mir jedoch nicht gelungen.:wallbash:

    (Linken etc.)

    1.Frage Hat jemand damit Erfahrung diese Software HIDAPI in eine Applikation einzubinden ? :helpnew:



    Habe dann weiter geforscht und habe ein weiteres interessantes Softwarepaket gefunden, das in C geschrieben ist.;)

    Siehe hier: https://elixir.bootlin.com/lin…ivers/hid/usbhid/hiddev.c

    ( Copyright (c) 2001 Paul Stewart,* Copyright (c) 2001 Vojtech Pavlik)

    Nach Durchsicht des C-code, vermutlich sehr gut zu gebrauchen, ABER :conf:

    der gcc findet folgende Headerdateien nicht. (Anmerkung : Der Autor ist kein Linuxfreak :angel:)


    #include <linux/slab.h>

    #include <linux/module.h>

    #include <linux/init.h>

    #include <linux/usb.h>

    #include <linux/compat.h>

    #include <linux/vmalloc.h>

    #include <linux/list.h>

    #include <linux/mutex.h>

    #include <linux/timer.h>

    #include <linux/workqueue.h>


    2A.Frage Gibt es diese Dateien im Debian(Linux) des PI3 überhaupt ?:helpnew:

    2B.Frage Wenn "ja" wo liegen diese ?:helpnew:

    2C.Frage Wenn "nein" können sie nachträglich installiert werden ?:helpnew:


    Nun zum Schluß, evtl hat jemand ja noch eine ganz andere Idee !:neutral:


    Für Antworten im Voraus Danke :danke_ATDE:

  • Erstmal Danke für Deine Nachricht Tell. :shy:


    Die Dateien:

    #include <linux/slab.h>

    #include <linux/module.h>

    #include <linux/init.h>

    #include <linux/usb.h>

    #include <linux/compat.h>

    #include <linux/vmalloc.h>

    #include <linux/list.h>

    #include <linux/mutex.h>

    #include <linux/timer.h>

    #include <linux/workqueue.h>


    liegen nicht unter dem angegebenen Pfad, bzw. sind überhaupt nicht vorhanden.


    Deine Idee "libusb-dev " zu installieren habe ich gemacht.

    Wurde auch prima ausgeführt. Version 2:0.1.12-25 ist installiert.:bravo2:

    Jedoch keine der oben genannten Dateien.


    Die müsse irgend wie mit einer andere Installation(en) eingerichtet werden.:wallbash:


    Wer kann weiterhelfen, Danke im Voraus.:danke_ATDE:

  • Erstmal Danke für Deine Nachricht Linus. :shy:


    Du gesucht habe ich natürlich auch schon, da kein absoluter Anfänger. :-/

    Sicher wird dir aber dann auch aufgefallen sein das es (bei mir 380000) Einträge gibt.

    Bevor ich eine Installation der "kernal header Dateien" durchführe, suche ich vorab

    dann gern den Rat von Linux-profies :shy:


    Zum Thema

    Dies Seite habe ich aufgerufen:

    https://www.garron.me/en/go2li…ers-debian-or-ubuntu.html


    und dann würde ich derzeitig nur das ausführen:

    Code
    1. sudo apt-get install linux-headers-$(uname -r)

    Es wäre freundlich von Dir/Euch mir dieses Vorgehen zu bestätigen das ich damit

    die header-Dateien ( wie oben geschrieben erhalte). :cool:

    Möchte nicht unbedingt, wie auf der gefundenen Interseite beschrieben, automatische Update installieren. :stumm:


    Danke im Voraus.:danke_ATDE:

  • Habe dann weiter geforscht und habe ein weiteres interessantes Softwarepaket gefunden, das in C geschrieben ist. ;)

    Siehe hier: https://elixir.bootlin.com/lin…ivers/hid/usbhid/hiddev.c

    Hallo WindyMus,


    auf der von Dir verlinkten Seite finden sich die Header passend zur Version (hier mal v3.19.8, weil Dein Link da hinführt) hier. 


    Gruß, STF

  • Erstmal Danke für Eure Nachrichten. :shy:


    Erfolg leider keine, Da alle Installationen der kernal-header abgelehnt werden wegen falscher Linux Version.:@


    Werde morgen es weiter versuchen. Tipps bzw. Installation Anweisungen gern.:neutral:


    Danke im Voraus.:danke_ATDE:

  • Wie komme ich an sie ran bzw. wie oder wo installiere ich

    raspbian vorausgesetzt:

    Code
    1. sudo apt-get update
    2. apt-cache policy raspberrypi-kernel raspberrypi-kernel-headers

    Die angezeigten Versionen sollten übereinstimmen, dann ggf.

    Code
    1. sudo apt-get install raspberrypi-kernel-headers

    The S in IoT stands for Security

    Einmal editiert, zuletzt von llutz ()

  • Erstmal Danke für Eure Nachrichten. :shy:


    Doch nochmal heute. (Weil neugierig):geek:


    1. Fehlermeldungen usw. hätte ich morgen gesendet. Ihr habt aber du hast natürlich recht.

    Werde mich bessern.:blush:


    2. llutz in ähnlicher Form habe ich es bereits versucht, werde deine Vorschlag aufgreifen.:denker:


    :danke_ATDE:


    PS: Habe für alle die Interesse haben, jetzt mein Profil angelegt.

  • Hallo an alle, die Interesse haben, für das Thema:;)

    Bin vorgegangen wie llutz es beschrieben hat.:cool:

    a) sudo apt-get update (Ablauf Spoiler klicken)

    Paketlisten werden gelesen... Fertig


    b) apt-cache policy raspberrypi-kernel raspberrypi-kernel-headers (Ablauf Spoiler klicken)

    c) sudo apt-get install raspberrypi-kernel-headers (Ablauf Spoiler klicken)

    Entpacken von raspberrypi-kernel-headers (1.20170703-1) ... (Achtung das braucht seine Zeit, ca. 10-15 min)

    raspberrypi-kernel-headers (1.20170703-1) wird eingerichtet ...


    Soweit ging alles gut. :bravo2:



    Jetzt gilt es noch die Header-Dateien zu finden, wo sie liegen. Es wären::daumendreh2:

    #include <linux/slab.h>

    #include <linux/module.h>

    #include <linux/init.h>

    #include <linux/usb.h>

    #include <linux/compat.h>

    #include <linux/vmalloc.h>

    #include <linux/list.h>

    #include <linux/mutex.h>

    #include <linux/timer.h>

    #include <linux/workqueue.h>


    Melde mich sobald es nach meinen Vorstellungen läuft.:sleepy:

  • So grundsätzlich habe ich sie die Dateien.:bravo2:


    Sie liegen unter

    "/usr/src/linux-headers-4.9.35-v7+"

    und auch unter

    "/usr/src/linux-headers-4.9.35+"



    Frage: Welcher wäre der richtige Pfad ?.:conf:

    Meine linux kernelversion ist 4.4.50-v7+

    Demnach vermute ich mal "/usr/src/linux-headers-4.9.35-v7+" ist die richtige.



    Es ergibt sich aber noch ein kleines Problem bei der Kompilierung mit gcc

    Ich habe die Pfade in der c-Datei für

    " #include </usr/src/linux-headers-4.9.35-v7+/include/linux/slab.h>" benannt.

    slab.h wird erkannt, jedoch z.B. Header-Dateien die in slab.h zitiert werden z.B.

    "#include <linux/gfp.h>" findet gcc nicht, logisch.


    Frage: Gibt eine Möglichkeit die Header-Dateien (z.B. slab.h) nach "linux/" zu kopieren,

    wenn ja wie und gibt es evtl. negative Seiteneffekte ?:helpnew:


    Für alle die sich mit meinem Problem befasst und geholfen haben .:danke_ATDE:


    PS: Könnte ja für den/die Eine/Eine oder Anderen/Andere auch interessant sein was hier besprochen wurde.

    Sobald das mit dem USB-HID funktioniert "Poste" ich die Ergebnisse dann gern.:geek:





  • Servus WindyMus ,

    nö ... wie kommst Du darauf?

    Deine Kernel.-Header müssten unter usr/src/linux-headers-4.4.50-v7+ stehen ...

    Du hast die Header der aktuellen Version installiert, Dein Kernel ist aber scheinbar älter ... Du müsstest, damit das zusammenpasst, also die Header für Deinen Kernel installieren ...

    Poste mal sicherheitshalber die Ausgabe von uname -a

    Die Header für den 4.4er Kernel installierst Du mit sudo apt-get install linux-headers-4.4


    Es ergibt sich aber noch ein kleines Problem bei der Kompilierung mit gcc

    Ich habe die Pfade in der c-Datei für

    " #include </usr/src/linux-headers-4.9.35-v7+/include/linux/slab.h>" benannt.

    So was "tut" man nicht ... das ist schlechter Stil und das solltest Du Dir erst gar nicht angewöhnen.

    Der Teil "/usr/src" wird durch die Compiler-Option -I angegeben.

    Der Part "linux-headers-4.9.35-v7+" wird über ein Makro z.B. "linux-headers-"+$(uname -r) im Makefile oder dem CLI des Compilers immer auf die richtige Version gesetzt.



    Frage: Gibt eine Möglichkeit die Header-Dateien (z.B. slab.h) nach "linux/" zu kopieren,

    wenn ja wie und gibt es evtl. negative Seiteneffekte ?:helpnew:

    Da gilt:

    absolut verboten. Niemals System-Header umbenennen oder herumkopieren

    ... das fliegt Dir irgendwann um die Ohren ...


    ciao,

    -ds-


  • Nun mal wieder Hallo,

    vorab :danke_ATDE: für die weiteren Infos.


    Deine Kernel.-Header müssten unter usr/src/linux-headers-4.4.50-v7+ stehen ...

    Diesen Pfad habe ich nicht. Sowohl vor bzw. nach der Installation (sudo apt-get install raspberrypi-kernel-headers):denker:

    Poste mal sicherheitshalber die Ausgabe von uname -a

    4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux :cool:


    Die Header für den 4.4er Kernel installierst Du mit sudo apt-get install linux-headers-4.4

    Das werde ich dann mal machen, mal sehen was passiert.:angel:

    " #include </usr/src/linux-headers-4.9.35-v7+/include/linux/slab.h>"

    So was "tut" man nicht ... das ist schlechter Stil und das solltest Du Dir erst gar nicht angewöhnen.

    Das gewöhne ich mir nicht an, weil ich wie Du es auch nicht für die richtige Vorgehensweise halte.

    Für einen ersten Versuch, ist es aber natürlich legitim, um zu prüfen ob es überhaupt geht. (Programmierzeit ist teuer

    und bevor erst "Make-Dateien" dazu Test usw. gemacht werden ist eine schlanke schnelle Lösung, die beste

    Erfahrung die gemacht wird, bevor man sich im Klein/Klein verliert):cool:



    Frage: Gibt eine Möglichkeit die Header-Dateien (z.B. slab.h) nach "linux/" zu kopieren,

    wenn ja wie und gibt es evtl. negative Seiteneffekte ? :helpnew:

    Da gilt:absolut verboten. Niemals System-Header umbenennen oder herumkopieren

    ... das fliegt Dir irgendwann um die Ohren ...

    Ich habe mir so was schon gedacht. Hatte jedoch die kleine Hoffnung das linux nicht so absolut ist.

    Nun ja: Ein Betriebssystem kann nicht alle Wünsche befriedigen. (Leider):@