• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

problem mit modprobe ipw2200

vida_jan

Newbie
wenn ich ipw2200 mit modprobe ipw2200 bekomme ich folgendes:

Code:
WARNING: Error inserting ieee80211 (/lib/modules/2.6.12-rc3-vidalinux/net/ieee80 211.ko): Unknown symbol in module, or unknown parameter (see dmesg)
FATAL: Error inserting ipw2200 (/lib/modules/2.6.12-rc3-vidalinux/net/ipw2200.ko ): Unknown symbol in module, or unknown parameter (see dmesg)


dmesg liefert dann folgendes:

Code:
ieee80211_crypt: registered algorithm 'NULL'
ieee80211: Unknown symbol is_multicast_ether_addr
ipw2200: Unknown symbol is_multicast_ether_addr
ipw2200: Unknown symbol ieee80211_wx_set_encode
ipw2200: Unknown symbol ieee80211_wx_get_encode
ipw2200: Unknown symbol ieee80211_txb_free
ipw2200: Unknown symbol ieee80211_wx_get_scan
ipw2200: Unknown symbol ieee80211_rx
ipw2200: Unknown symbol ieee80211_rx_mgt
ipw2200: Unknown symbol free_ieee80211
ipw2200: Unknown symbol alloc_ieee80211

was kann ich da machen?
 
Ein aktuelles IEEE80211-System verwenden. Die neueren IPW-Treiber erfordern das. Schau mal bei http://ieee80211.sourceforge.net vorbei.

Greetz, HB
 
OP
V

vida_jan

Newbie
hmm .. habe nun die neuesten treiber installiert, aber der fehler tritt immernoch auf ... sollte vllt noch erwähnen, dass ich vidalinux benutzte und dort ipw2100 vorinstalliert war .. habe zwar versucht dieses zu löschen, war aber vllt nicht 100% erfolgreich :roll:
 
OP
V

vida_jan

Newbie
gibt es vllt eine möglichkeit von allen ipw einstellungen und dateien loszukommen und komplett von vorne zu beginnen?

was mich stutzig macht ist, dass wenn ich den treiber mit emerge -C ipw2200 lösche, modprobe ipw2200 immernoch eine ausgabe gibt und sagt dass er dir geforderten dateien nicht findet :roll:
 
Wenn du von der oben angegebenen Adresse das aktuellste IEEE80211-Paket geladen hast und es nach Anleitung installierst, säubert es erst einmal den Kernel von eventuellen Altresten einer Vorgängerversion. Um es aber auch wirklich einzubinden musst du entweder die evtl. bereits vorhandenen Module von Hand ausklinken (via rmmod bzw. modprobe -r) oder einen Neustart machen.
Danach kannst du dann den Treiber von http://ipw2200.sf.net installieren, der eine aktuelle IEEE80211-Umgebung voraussetzt. Auch hier musst du vor der Benutzung ein evtl. bereits eingebundenes Modul entfernen. Sollte das mit dem modprobe erst nicht klappen, kannst du auch testweise im ipw2200-Verzeichnis einmal in der Konsole ein ". load" ausführen.
Wenn deine Probleme damit andauern, schick doch einfach einmal die Ausgabe von dmesg (den Teil mit IEEE80211 und IPW).

Greetz, HB
 
OP
V

vida_jan

Newbie
also das säubern hat nun geklappt!

glaube ich habe den möglichen fehler gefunden:

führe make von ieee80211 aus und bekomme folgende warnung:

Code:
*** Warning: "is_multicast_ether_addr" [/home/jan/ipw/ieee80211-1.0.3.tgz_FILES/ieee80211-1.0.3/ieee80211.ko] undefined!

modprobe ieee80211 gibt wie erwartet wieder dieses aus:
Code:
modprobe ieee80211
FATAL: Error inserting ieee80211 (/lib/modules/2.6.12-rc3-vidalinux/net/ieee80211/ieee80211.ko): Unknown symbol in module, or unknown parameter (see dmesg)
 
OP
V

vida_jan

Newbie
ja, das wirds wohl sein ... wenn du mir nun kurz noch erklärst, wie ich das anstellen muss .. sry, aber habe noch nie ein kernel patch installiert und mir wäre es doch sehr wichtig, dass das 100% klappt ;)
 
Erst einmal musst du wissen, was du patchen möchtest. Da die patch-Dateien ganz normale ASCII-Textdateien sind, kannst du einfach hineinschauen, normalerweise steht das in der ersten Zeile. Dort steht dann ein Dateiname mit einem bestimmten Pfad. Hast du die gleiche Pfadstruktur, wechselst du in der Konsole in das Verzeichnis darüber und startest patch -p0 < bla.patch. Um einen Patch rückgängig zu machen, fügst du zusätzlich zwischen "patch" und "<" die Option "-R" ein.
Stimmt deine Pfadstruktur nicht mit der angegebenen überein, musst du abzählen, ab dem wievielten "/" von links sie wieder übereinstimmen. Dann wechselst du in der Konsole in die Verzeichnisebene oberhalb der Übereinstimmung und führst "patch -p3 < bla.patch" ein, wobei du "3" durch die gefundene Zahl der Schrägstriche ersetzt. Auch hier dient die Option -R zum Rückgängigmachen des Patches.

Greetz, HB
 
OP
V

vida_jan

Newbie
ich habe dich mal in icq hinzugefügt, denke, dass wir das dort schneller regeln können.

weiß nur nich, ob ich heute abend noch dazu komme .. ansonsten, schreiben wir uns die tage bestimmt mal. :)
 
OP
V

vida_jan

Newbie
ahso .. nagut ;) ... dann wünsch ich dir viel spass im urlaub und besseres wetter als hier! :)

und vielen dank für deine hilfe :D
 
OP
V

vida_jan

Newbie
hmm .. vllt kannst du trotzdem mir nochmal kurz erklären, wie ich den patch genau anwende, also am beispiel ipw2200 .. welche datei brauche ich? .. fixed patch? .. oder corrected patch? .. wo speicher ich den patch und wie führ ich den dann genau aus? .. habs nämlich versucht und nicht hinbekommen, er sagt mir, dass er die zu patchende datei nicht findet :(
 
Wenn ich das richtig sehe, brauchst du den fix.patch.
Allerdings erscheinen mir die Pfadangaben dort sehr merkwürdig.
Wenn es damit nicht funktioniert, probier einmal diesen hier:
Code:
diff --git a/ieee80211-1.0.3/ieee80211_tx.c b/ieee80211-1.0.3/ieee80211_tx.c
--- a/ieee80211-1.0.3/ieee80211_tx.c
+++ b/ieee80211-1.0.3/ieee80211_tx.c
@@ -337,8 +337,7 @@ int ieee80211_xmit(struct sk_buff *skb,
 
 	/* Determine fragmentation size based on destination (multicast
 	 * and broadcast are not fragmented) */
-	if (is_multicast_ether_addr(dest) ||
-	    is_broadcast_ether_addr(dest))
+	if (is_multicast_ether_addr(dest))
 		frag_size = MAX_FRAG_THRESHOLD;
 	else
 		frag_size = ieee->fts;
diff --git a/ipw2200/ipw2200.c b/ipw2200/ipw2200.c
--- a/ipw2200/ipw2200.c
+++ b/ipw2200/ipw2200.c
@@ -7258,9 +7258,8 @@ static inline int is_network_packet(stru
 		if (!memcmp(header->addr2, priv->net_dev->dev_addr, ETH_ALEN))
 			return 0;
 
-		/* {broad,multi}cast packets to our IBSS go through */
-		if (is_broadcast_ether_addr(header->addr1) ||
-		    is_multicast_ether_addr(header->addr1))
+		/* multicast packets to our IBSS go through */
+		if (is_multicast_ether_addr(header->addr1))
 			return !memcmp(header->addr3, priv->bssid, ETH_ALEN);
 
 		/* packets to our adapter go through */
@@ -7273,8 +7272,7 @@ static inline int is_network_packet(stru
 			return 0;
 
 		/* {broad,multi}cast packets to our IBSS go through */
-		if (is_broadcast_ether_addr(header->addr1) ||
-		    is_multicast_ether_addr(header->addr1))
+		if (is_multicast_ether_addr(header->addr1))
 			return !memcmp(header->addr2, priv->bssid, ETH_ALEN);
 
 		/* packets to our adapter go through */
@@ -9173,8 +9171,7 @@ static inline void ipw_tx_skb(struct ipw
 	switch (priv->ieee->iw_mode) {
 	case IW_MODE_ADHOC:
 		hdr_len = IEEE80211_3ADDR_LEN;
-		unicast = !is_broadcast_ether_addr(hdr->addr1) &&
-			!is_multicast_ether_addr(hdr->addr1);
+		unicast = !is_multicast_ether_addr(hdr->addr1);
 		id = ipw_find_station(priv, hdr->addr1);
 		if (id == IPW_INVALID_STATION) {
 			id = ipw_add_station(priv, hdr->addr1);
@@ -9189,8 +9186,7 @@ static inline void ipw_tx_skb(struct ipw
 
 	case IW_MODE_INFRA:
 	default:
-		unicast = !is_broadcast_ether_addr(hdr->addr3) &&
-			!is_multicast_ether_addr(hdr->addr3);
+		unicast = !is_multicast_ether_addr(hdr->addr3);
 		hdr_len = IEEE80211_3ADDR_LEN;
 		id = 0;
 		break;
diff --git a/ieee80211-1.0.3/net/ieee80211.h b/ieee80211-1.0.3/net/ieee80211.h
--- a/ieee80211-1.0.3/net/ieee80211.h
+++ b/ieee80211-1.0.3/net/ieee80211.h
@@ -719,16 +719,12 @@ enum ieee80211_state {
 #define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
 
 
-extern inline int is_multicast_ether_addr(const u8 *addr)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)
+static inline int is_multicast_ether_addr(const u8 *addr)
 {
-	return ((addr[0] != 0xff) && (0x01 & addr[0]));
-}
-
-extern inline int is_broadcast_ether_addr(const u8 *addr)
-{
-	return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&   \
-		(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
+	return addr[0] & 0x01;
 }
+#endif
 
 #define CFG_IEEE80211_RESERVE_FCS (1<<0)
 #define CFG_IEEE80211_COMPUTE_FCS (1<<1)
In einem Ordner bspw. /tmp entpackst du die beiden Archive (ieee80211 und ipw2200) in je einen Unterordner namens ieee80211-1.0.3 und ipw2200. Dann wechselst du in der Konsole in den Ordner (hier /tmp) und führst patch -p1 < wieauchimmer.patch aus.
Du kannst auch zur Not selbst die Pfadangaben in der Patch-Datei ändern. Wenn er eine Datei nicht findet, zeigt das Programm dir an, wo es gesucht hat.

Greetz, HB
 
Oben