Hallo, ich bin gerade dabei ein Datenpaket über Ethernet zu verschicken. Den Programmcode habe ich soweit fertig, das Kompilieren klappt jedoch nicht. Mein Problem ist, dass bei meinem Betriebssystem die Headerfiles teilweise mehrfach unter dem gleichen Namen auftauchen aber mit verschiedenem Inhalt. Konkret bedeutet das, ich habe einmal die Datei if_vlan.h im Dateipfad /usr/include/linux und nochmal die Datei if_vlan.h mit anderem Inhalt im Dateipfad /usr/src/linux-headers-3.19.0-25/include/linux Alle Versuche manuell Dateien in den ersten Pfad umzukopieren o.Ä schlugen fehl, weil die einzelnen Headerfiles wiederum andere inkludieren usw. Mein Lösungsansatz: Kann man in Makefiles eine Priorität der Include-Dateien einstellen, so dass beim Kompilieren erst der erste Dateipfad durchsucht wird, und wenn er dort nicht fündig wird, den zweiten Dateipfad durchsucht ? Gruß Roland
Roland E. schrieb: > Mein Lösungsansatz: > ... ist falsch. Solange Du keine Treiber- bzw. Kernelentwicklung (bzw. ganz spezielle Userspace-Entwicklungen) machst, gehen dich die Header in /usr/src/linux-headers... nix an. Die Header in /usr/include/linux sind die, mit denen (wenn richtig installiert) deine glibc und andere wichtige Libraries gebaut wurden. Da bestehen Abhängigkeiten, die beim "Mischen" nur zu Problemen führen. Deshalb solltest Du auch nur die verwenden. Installiere beide Pakete neu und versuch's nochmal. Grundsätzlich ist es überhaupt keine gute Idee, Systemdateien, die aus Paketen stammen, wild umherzukopieren.
Danke für die rasche Antwort. Leider gibt es unter /usr/include/linux keine Header-Datei, die eine struct für Ethernet-Frames mit VLAN erzeugt, sondern nur die struct ether_header. Unter if_vlan.h des linux-headers-Pfads gäbe es die struct vlan_ethhdr, deren Aufbau genau meinen Bedürfnissen entspräche. Aber naja, dann muss ich den Frame wohl hardcoden. Gruß Roland
Roland E. schrieb: > die eine struct für Ethernet-Frames mit VLAN erzeugt Das ist doch aber deiner Anwendung voellig wurst, ob das nun LAN, VLAN, WLAN, oder sonstwas ist. Darum kuemmern sich die Treiber/der Kernel. Was waere das fuer ein Aufwand, wenn das jede Anwendung selber implementieren muesste? Warum glaubst du, das du das brauchst?
Erklärung siehe z.B.: https://stackoverflow.com/questions/9094237/whats-the-difference-between-usr-include-linux-and-the-include-folder-in-linux Roland E. schrieb: > Konkret bedeutet das, ich habe einmal die Datei if_vlan.h im Dateipfad > /usr/include/linux => Header Files für Programme im USER Bereich. User-Space Programme können damit Kernel Module ansteuern. > und nochmal die Datei if_vlan.h mit anderem Inhalt im Dateipfad > /usr/src/linux-headers-3.19.0-25/include/linux => Header Files für Kernel-Module. Wenn es für das 'Problem' keine Header gibt, dann bedeutet das ganz einfach das es keine Schnittstelle aus einem Kernel Modul heraus dafür gibt. Entweder gibt es dann dafür andere (evtl. generische) Schnittstellen, auf die man zunächst nicht kommt, oder man muss sich ein Kernel Modul erstellen.
Okay, Danke für die Antwort. @Kaj und natürlich auch für jeden anderen Interessierten: Ich will über eine Ethernetverbindung einen Display(der war mal in einem Auto verbaut) ansteuern. Im angehängten Bild ist der geforderte Aufbau für meine Datenpakete. Gruß Roland
Roland E. schrieb: > Im angehängten Bild ist der geforderte Aufbau für meine Datenpakete. Soweit ich das auf die Schnelle erkenne, ist das ein völlig normales ICMP-Paket. Warum willst Du unbedingt an den VLAN-Tags rumfummeln?
Im Bereich "Ethernet MAC" steht unter der MAC-Sourceaddresse doch "VLAN_TPID", "VLAN_PRIO", "VLAN_CFI" und "VLAN_ID". Danach folgen dann die Header für IPv4 und ICMP sowie die Nutzdaten.
Aber so macht man das nicht. Falls dein komisches Device ernsthaft auf VLAN-Tags besteht (was ich ernsthaft bezweifle, schliesslich ist es ja kein Switch und wozu soll das dann gut sein?), dann erzeugst Du die doch nicht von Hand. Definiere auf deiner Linux-Maschine einfach ein Tagging Interface, den Rest macht dein IP-Stack von alleine (Du schickst völlig "normale" Pakete drüber und das Interface macht das Tagging). Google mal nach "Linux 802.1Q", da gibt's etliche How-To's.
Markus F. schrieb: > > > Falls dein komisches Device ernsthaft auf VLAN-Tags besteht (was ich > ernsthaft bezweifle, schliesslich ist es ja kein Switch und wozu soll > das dann gut sein?), dann erzeugst Du die doch nicht von Hand. > Es könnte mit der Möglichkeit des Daisy-Chaining zusammenhängen. Aber da ich nie einen Gedanken daran verschwendet habe mehrere Displays zu verwenden, habe ich dieses Kapitel im Manual nicht einmal überflogen. Ansonsten werde ich mal deinen Rat befolgen, allerdings eher mit duckduckgo ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.