PDA

Visualizza la versione completa : Kernel 2.6.12-rcx


wolf64
07-06-2005, 14:04
Con questo apro un thread per quanti, come il sottoscritto, piace provare le ultimissime novità e le conseguenti nuove feature, il tutto ovviamente a proprio rischio e pericolo!!! ;)

Per i mod, non è un doppione dell'altro thread (http://forum.html.it/forum/showthread.php?threadid=842285), quello serve più come news per il nuovo governor (e poi ho aggiunto la nota sul pwc), invece in questo vorrei discutere su eventuali problemi o innovazioni dei 2.6.12-rcx ("x" sta per un numero ovviamente.

wolf64
07-06-2005, 14:23
Parto dall'ultimo (comunque sono benvenute discussioni anche sui precedenti, magari mettendone il nome nel titolo per una più veloce identificazione).

Allora, primo problema, con il modulo esterno al kernel ipw2100 (http://ipw2100.sourceforge.net/), serve per la prima versione delle schede mini-pci wireless incluse nei sistemi Centrino, i successivi sono gli ipw2200 (http://ipw2200.sourceforge.net/), ma torniamo al 2100 in quanto io uso quello.

Compilando il driver ho ricevuto il seguente messaggio di errore:



make -C /lib/modules/2.6.12-rc6/build SUBDIRS=/home/gigi/modules-extra/Wireless/ipw2100-1.1.0
(qui sono andato a capo io per non "allargare" troppo il thread!)
MODVERDIR=/home/gigi/modules-extra/Wireless/ipw2100-1.1.0 modules
make[1]: Entering directory `/usr/src/linux-2.6.12-rc6'
CC [M] /home/gigi/modules-extra/Wireless/ipw2100-1.1.0/ipw2100.o
In file included from /home/gigi/modules-extra/Wireless/ipw2100-1.1.0/ipw2100.h:43,
from /home/gigi/modules-extra/Wireless/ipw2100-1.1.0/ipw2100.c:167:
/home/gigi/modules-extra/Wireless/ipw2100-1.1.0/ieee80211.h:647: error: redefinition of `is_multicast_ether_addr'
include/linux/etherdevice.h:67: error: `is_multicast_ether_addr' previously defined here
make[2]: *** [/home/gigi/modules-extra/Wireless/ipw2100-1.1.0/ipw2100.o] Error 1
make[1]: *** [_module_/home/gigi/modules-extra/Wireless/ipw2100-1.1.0] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.12-rc6'
make: *** [modules] Error 2


In pratica, la funzione "is_multicast_ether_addr" era implementata nel file header ieee80211.h facente parte del modulo e non nei kernel precedenti a questo, da questo è stata invece implementata nel file "include/linux/etherdevice.h", e la cosa non va bene (il compilatore non capisce quale delle due deve usare e... nel dubbio esce con un errore! :D ).
La soluzione che ho adottato è stata semplicemente di commentare la parte di codice inerente a questa funzione nel modulo, perciò in ieee80211.h, e usare quella implementata nel kernel (mi sembra la scelta più sicura e più funzionale per il sistema).

Applicare questa patch nel modo sopra descritto è molto semplice per chi ha un minimo di dimestichezza con il C/C++ (o anche altri linguaggi), per i più pigri ho però preparato una piccolissima patch da applicare con l'ononimo comando, è la seguente:



--- ieee80211.h.old 2005-06-07 13:43:44.000000000 +0200
+++ ieee80211.h 2005-06-07 13:43:44.000000000 +0200
@@ -642,11 +642,12 @@
#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
#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)
{
return ((addr[0] != 0xff) && (0x01 & addr[0]));
}
+*/

extern inline int is_broadcast_ether_addr(const u8 *addr)
{


Se fate un copia/incolla in un file e lo chiamate come l'ho chiamato io: "ieee80211.h-krn-2.6.12-rc6.diff", potete poi applicarlo spostando il file nella directory decompressa del modulo e lanciando:
patch -p0 < ieee80211.h-krn-2.6.12-rc6.diff

dopo potete compilare e installare il modulo senza problemi.


:ciauz:

wolf64
07-06-2005, 15:03
Ho appena letto nella ml di ipw2100/ipw2200 che la cosa riguarda anche il 2200, la patch postata da quello che ha sollevato la questione cancella il codice anzichè commentarlo come ho fatto io (è una mia abitudine, di commentare il codice anzichè cancellarlo!), ai fini del compilatore il risultato è lo stesso.

Loading