Als erstes funktionierte das Modul ganz normal nach dem Update des Kernels nicht mehr und ich musste
Code:
modprobe ath_pci
wie gewohnt durchführen, diesmal kam aber eine unerwartete Fehlermeldung, die besagt das sich einiges am Code des neuen Kernels getan zu haben scheint
Code:
Fehler, den ich später nochma raussuchen muss...
Also habe ich mich in mein src Verzeichnis begeben und Madwifi neu kompiliert. Ein make lief im Großen und Ganzen Klaglos durch und ich machte mich an ein make install, da gingen die Probleme los :
Code:
implicit declaration of function '__skb_append'
google spuckte ziemlich viel dazu aus, unter anderem auch folgende hilfreiche Seite :
Changeset 3696 auf madwifi.org
im Grunde besagt dieses Changeset,
Code:
Replace obsolete skb_append() with skb_queue_after(). Update
makefiles to deal with obj not being set and the module build time.
die Funktion skb_append() gegen skb_queue_after() ersetzen soll und danach die Makefiles und 3 eigentlich viel primärere Dateien :
Code:
madwifi/branches/madwifi-0.9.4/include/compat.h (modified) (1 diff)
madwifi/branches/madwifi-0.9.4/net80211/ieee80211_linux.h (modified) (2 diffs)
madwifi/branches/madwifi-0.9.4/net80211/ieee80211_power.c (modified) (1 diff)
modifizieren muss.
Um mein Madwifi nun endlich wieder davon zu überzeugen mich ins Netz zu bringen musste ich also ein bisschen Handarbeit verrichten. Zu erst knöpfte ich mir alle Makefiles vor und löschte überall
Code:
ifeq ($(obj),)
obj= .
endif
obj := $(firstword $(obj) $(SUBDIRS) .)
kann auch sein ich hatte da was falsch verstanden, mein Englisch ist nicht wirklich ne Sprache
jedenfalls hat das zu Problemen geführt und ich habs wieder rückgängig gemacht. Entscheidender waren aber folgende Änderungen :in der Datei madwifi/branches/madwifi-0.9.4/include/compat.h fügt man folgende Zeilen ab Zeile 178 ein :
Code:
/* __skb_append got a third parameter in 2.6.14 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
#define __skb_queue_after(_list, _old, _new) __skb_append(_old, _new)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
#define __skb_queue_after(_list, _old, _new) __skb_append(_old, _new, _list)
#endif
in madwifi/branches/madwifi-0.9.4/net80211/ieee80211_linux.h löscht man folgenden Code ab Zeile 241 :
Code:
/* __skb_append got a third parameter in 2.6.14 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
#define __skb_append(a,b,c) __skb_append(a,b)
#endif
sowie den von Zeile 271 bis Zeile 280 :
Code:
#define _IEEE80211_NODE_SAVEQ_ENQUEUE(_ni, _skb, _qlen, _age) do {
struct sk_buff *tail = skb_peek_tail(&(_ni)->ni_savedq);
if (tail != NULL) {
_age -= M_AGE_GET(tail);
__skb_append(tail, _skb, &(_ni)->ni_savedq);
} else {
__skb_queue_head(&(_ni)->ni_savedq, _skb);
}
M_AGE_SET(_skb, _age);
(_qlen) = skb_queue_len(&(_ni)->ni_savedq);
und fügt dann folgenden Code ab Zeile 266 ein :
Code:
#define _IEEE80211_NODE_SAVEQ_ENQUEUE(_ni, _skb, _qlen, _age) do {
struct sk_buff *tail = skb_peek_tail(&(_ni)->ni_savedq);
if (tail != NULL) {
_age -= M_AGE_GET(tail);
__skb_queue_after(&(_ni)->ni_savedq, tail, _skb);
} else {
__skb_queue_head(&(_ni)->ni_savedq, _skb);
}
M_AGE_SET(_skb, _age);
(_qlen) = skb_queue_len(&(_ni)->ni_savedq);
nun noch eine kleine Veränderung in der Datei madwifi/branches/madwifi-0.9.4/net80211/ieee80211_power.c, in Zeile 240 ändert man
Code:
__skb_append(tail, skb, &ni->ni_savedq);
in
Code:
__skb_queue_after(&ni->ni_savedq, tail, skb);
nun hat man hoffentlich alle Änderungen auch abgespeichert, in die Hauptdir der Madwifi Sources wechseln, make und make install ausführen, freuen das keine Fehlermeldungen mehr kommen und anschließend das neue Modul mit einem modprobe ath_pci zum Leben erwecken.
Für alle, die nicht so Fingerfertig mit dem Editieren von Code sind, habe ich den Source editiert gepackt und hier angehängt.
Modifizierte Madwifi Treiber für Linuxkernel > 2.6.26
ich hoffe das war einigen hilfreich, bei Fragen einfach hier posten.
mfg und viel Spaß
CAD
