Se qualcuno avesse in mente di compilare i driver linux-r1000(103).zip per il kernel 2.6.x Linux, abbia la bontà d’animo di sopportare la caritatevole indulgenza di Realtek, che ha deciso di dare pane e lavoro a programmatori dislessici.
Se provate a compilare i sorgenti come modulo, infatti, vi troverete con una bella caterva di errori:
root@moveaway:/usr/src/r1000# make clean modules
make -C src/ clean
make[1]: Entering directory `/usr/src/r1000/src'
rm -f *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags
make[1]: Leaving directory `/usr/src/r1000/src'
make -C src/ modules
make[1]: Entering directory `/usr/src/r1000/src'
make -C /lib/modules/2.6.16.18/build SUBDIRS=/usr/src/r1000/src modules
make[2]: Entering directory `/usr/src/linux-2.6.16.18'
CC [M] /usr/src/r1000/src/r1000_n.o
/usr/src/r1000/src/r1000_n.c: In function ‘r1000_close’:
/usr/src/r1000/src/r1000_n.c:1450: error: ‘entdev’ undeclared (first use in this function)
/usr/src/r1000/src/r1000_n.c:1450: error: (Each undeclared identifier is reported only once
/usr/src/r1000/src/r1000_n.c:1450: error: for each function it appears in.)
make[3]: *** [/usr/src/r1000/src/r1000_n.o] Error 1
make[2]: *** [_module_/usr/src/r1000/src] Error 2
make[2]: Leaving directory `/usr/src/linux-2.6.16.18'
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/r1000/src'
make: *** [modules] Error 2
root@moveaway:/usr/src/r1000#
Ahi, ahi. Che è successo? Osservate la riga evidenziata in grassetto:
/usr/src/r1000/src/r1000_n.c:1450: error: ‘entdev’ undeclared (first use in this function)
Mmmmmmmm…..ma cosa è questa entdev?
All’interno della directory in cui è sono stati decompressi i sorgenti del driver si trova una directory
src
nella quale è presente il file
r1000_n.c
Apriamolo e posizioniamoci alla riga 1450:
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
synchronize_irq ();
#else
synchronize_irq(entdev->irq);
#endif
free_irq (netdev->irq, netdev);
Notato qualcosa? Semplicemente netdev (NETwork DEVice) è magicamente diventato entdev, il tutto per 1 sola volta. Il che porta a una inconsistenza dei sorgenti. Come riparare il tutto? Semplicemente correggendo entdev in netdev:
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
synchronize_irq ();
#else
synchronize_irq(netdev->irq);
#endif
free_irq (netdev->irq, netdev);
Ora non resta che lanciare una nuova compilazione:
root@moveaway:/usr/src/r1000# make clean modules
make -C src/ clean
make[1]: Entering directory `/usr/src/r1000/src'
rm -f *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags
make[1]: Leaving directory `/usr/src/r1000/src'
make -C src/ modules
make[1]: Entering directory `/usr/src/r1000/src'
make -C /lib/modules/2.6.16.18/build SUBDIRS=/usr/src/r1000/src modules
make[2]: Entering directory `/usr/src/linux-2.6.16.18'
CC [M] /usr/src/r1000/src/r1000_n.o
CC [M] /usr/src/r1000/src/r1000_ioctl.o
LD [M] /usr/src/r1000/src/r1000.o
Building modules, stage 2.
MODPOST
CC /usr/src/r1000/src/r1000.mod.o
LD [M] /usr/src/r1000/src/r1000.ko
make[2]: Leaving directory `/usr/src/linux-2.6.16.18'
make[1]: Leaving directory `/usr/src/r1000/src'
Il modulo è pronto:
root@moveaway:/usr/src/r1000# ls -lah src/r1000.ko
-rw-r--r-- 1 root root 23K 2006-07-06 10:31 src/r1000.ko
root@moveaway:/usr/src/r1000#
Non rimane che lanciare gli ultimi due comandi necessari per l’installazione del nuovo modulo e il suo caricamento automatico all’avvio:
make install
depmod -a
Con buona pace dei programmatori dislessici di Realtek…