Compilazione e installazione del modulo rtl8180-sa2400-dev (FC5)

E’ una settimana buona che tento di compilare questi driver su Fedora Core 5 per usare la scheda Netgear MA521 (con ndiswrapper non funziona bene).

I problemi (ora risolti :-)) sono molteplici e sono dovuti al fatto che i driver non sono aggiornati (neanche quelli sul cvs) rispetto alla versione del kernel.

Andando sul sito ufficiale, scaricando i driver rtl8180-sa2400 (sia la versione stabile (fino al kernel 2.6.12) che quella “-dev” dal cvs) e compilandoli, succede una cosa molto strana: il make cancella tutti i sorgenti.

bash-3.1$ make
make -C /lib/modules/2.6.17-1.2187_FC5/build
SUBDIRS=/usr/local/src/rtl8180-sa2400-dev
MODVERDIR=/usr/local/src/rtl8180-sa2400-dev modules
make[1]: Entering directory `/usr/src/kernels/2.6.17-1.2187_FC5-i686′
rm: cannot remove `/usr/local/src/rtl8180-sa2400-dev/CVS’: Is a
directory
make[1]: *** [crmodverdir] Error 1
make[1]: Leaving directory `/usr/src/kernels/2.6.17-1.2187_FC5-i686′
make: *** [2.6] Error 2

Infatti, la directory non contiene più file (questo problema si riscontra anche per i driver scaricati dal sito della realtek):

bash-3.1$ ls
CVS
bash-3.1$

Ho lanciato make con l’opzione -n che mi visualizza i comandi che vengono invocati senza eseguirli:

bash-3.1$ make -n
make -C /lib/modules/2.6.17-1.2187_FC5/build
SUBDIRS=/usr/local/src/rtl8180-sa2400-dev
MODVERDIR=/usr/local/src/rtl8180-sa2400-dev modules
make[1]: Entering directory `/usr/src/kernels/2.6.17-1.2187_FC5-i686′
mkdir -p /usr/local/src/rtl8180-sa2400-dev
rm -f /usr/local/src/rtl8180-sa2400-dev/*

test -e /usr/src/kernels/2.6.17-1.2187_FC5-i686/Module.symvers || ( \
echo; \
echo ” WARNING: Symbol version
dump /usr/src/kernels/2.6.17-1.2187_FC5-i686/Module.symvers”; \
echo ” is missing; modules will have no dependencies and
modversions.”; \
echo )

Le righe in grassetto sono le righe incriminate (in particolare la seconda), il make crede che la directory corrente sia anche la directory temporanea, quindi prima la crea e poi la svuota (probabilmente nel caso ne esista già una e non riesca a crearla [ma questo non dovrebbe farlo la direttiva clean?])

Per risolvere il problema bisogna aprire il Makefile e modificare:

$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) MODVERDIR=$(PWD) modules

in

$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules

oppure

$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) MODVERDIR=$(PWD)/qualchecosa modules

l’importante è che MODVERDIR non sia uguale alla directory in cui abbiamo i sorgenti, altrimenti verrà cancellata.

Ora abbiamo risolto il problema dei sorgenti cancellati; lanciando la compilazione si ottiene un altro errore:


bash-3.1$ make
make -C /lib/modules/2.6.17-1.2187_FC5/build
SUBDIRS=/usr/local/src/rtl8180-sa2400-dev
MODVERDIR=/usr/local/src/rtl8180-sa2400-dev/tmp modules
make[1]: Entering directory `/usr/src/kernels/2.6.17-1.2187_FC5-i686′
CC [M] /usr/local/src/rtl8180-sa2400-dev/r8180_core.o
/usr/local/src/rtl8180-sa2400-dev/r8180_core.c:137: error: expected ‘)’
before string constant
/usr/local/src/rtl8180-sa2400-dev/r8180_core.c:140: error: expected ‘)’
before string constant
/usr/local/src/rtl8180-sa2400-dev/r8180_core.c:143: error: expected ‘)’
before string constant
/usr/local/src/rtl8180-sa2400-dev/r8180_core.c:146: error: expected ‘)’
before string constant
make[2]: *** [/usr/local/src/rtl8180-sa2400-dev/r8180_core.o] Error 1
make[1]: *** [_module_/usr/local/src/rtl8180-sa2400-dev] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.17-1.2187_FC5-i686′
make: *** [2.6] Error 2
bash-3.1$

Dopo giorni a pensarci ed a scrivere all’autore (che non ha risposto) ho scoperto che nel kernel 2.6.17 è stata rimossa la macro MODULES_PARM() ed è stata sostituita da modules_param(). Putroppo non ho trovato documentazione in merito quindi ho agito un po’ di istinto.

Aprire il file r8180_core.c e andare nella sezione simile a questa (intorno alla riga 130/150):


static char* ifname = “wlan%d”;
static int hwseqnum = 0;
static int hwwep = 0;
static int channels = 0x3fff;MODULE_LICENSE(“GPL”);

MODULE_DEVICE_TABLE(pci, rtl8180_pci_id_tbl);
MODULE_AUTHOR(“Andrea Merello <andreamrl@tiscali.it>”);
MODULE_DESCRIPTION(“Linux driver for Realtek RTL8180 / RTL8185 WiFi cards”);
MODULE_PARM_DESC(devname,” Net interface name, wlan%d=default”);MODULE_PARM(hwseqnum,”i”);
MODULE_PARM_DESC(hwseqnum,” Try to use hardware 802.11 header sequence numbers. Zero=default”);


MODULE_PARM(hwwep,”i”);
MODULE_PARM_DESC(hwwep,” Try to use hardware WEP support. Still broken and not available on all cards”);


MODULE_PARM(channels,”i”);
MODULE_PARM_DESC(channels,” Channel bitmask for specific locales. NYI”);


MODULE_PARM(hwwep,”i”);
MODULE_PARM_DESC(hwwep,” Try to use hardware WEP support. Still broken and not available on all cards”);


MODULE_PARM(channels,”i”);
MODULE_PARM_DESC(channels,” Channel bitmask for specific locales. NYI”);

E’ sufficiente sostituire alla macro MODULE_PARM(arg1, arg2), la macro module_param(arg1, tipo_di_dato_arg1, 0): il primo parametro rimane lo stesso, il secondo è il tipo di dato della variabile inserita come primo parametro (int per gli interi e charp per i puntatori char ad esempio) e il terzo è 0 (NOTA: Non sono sicuro al 100% che sia corretto).
Ora dovremmo ottenere (commentando le righe da sostituire):


//MODULE_PARM(hwwep,”i”);
module_param(hwwep,charp,0);
MODULE_PARM_DESC(hwwep,” Try to use hardware WEP support. Still broken and not available on all cards”);


//MODULE_PARM(channels,”i”);
module_param(channels,int,0);
MODULE_PARM_DESC(channels,” Channel bitmask for specific locales. NYI”);


//MODULE_PARM(hwwep,”i”);
module_param(hwwep,int,0);
MODULE_PARM_DESC(hwwep,” Try to use hardware WEP support. Still broken and not available on all cards”);


//MODULE_PARM(channels,”i”);
module_param(channels,int,0);
MODULE_PARM_DESC(channels,” Channel bitmask for specific locales. NYI”);

Una volta salvato il file e lanciata la compilazione con make, tutto dovrebbe funzionare.

Advertisements

One thought on “Compilazione e installazione del modulo rtl8180-sa2400-dev (FC5)

  1. Io, invece, ho contattato l’autore che mi ha gentilmente risposto, chiarendomi che i driver non sono aggiornati, ma che comunque posso trovare qualcosa riferendomi alle schede RTL818X.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s