seite 1 von 1
30.09.2008 17:19:31

implicit declaration of function '__skb_append'

# 1
mastercad
>>> Themenstarter


Angemeldet Seit : 01.02.2007
Beiträge : 47
Ø 0.02 Posts pro Tag
Ständig kommen neue probleme mit einem neuen Kernel 2.6.26 unter Debian und meinem installierten Madwifi 0.9.4. Da ich aber am Laptop schon gern mein Internet, sprich WLAN nutzen würde und ich nach 3 tagen apt-get upgrade keine Hoffnung mehr hatte, das sich da was grundlegend im Kernel noch ändert, habe ich mich mal wieder auf die Suche nach einer Lösung begeben.

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

seite 1 von 1
Sie haben Javascript deaktiviert, so k�nnen Sie die Seite zwar problemlos nutzen,
einige n�tzliche Funktionen werden aber nicht mehr funktionieren.