I driver Linux Realtek RTL8111(B)/RTL8168(B) e i programmatori dislessici

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…

11 Risposte a “I driver Linux Realtek RTL8111(B)/RTL8168(B) e i programmatori dislessici”

  1. l’hanno fatto ancora >>> r1000_v1.04.
    stesso sorgente con bug, fixato grazie a san google e all’unico link scovato dalla ricerca sullerrore:
    http://se.os.st/bbs/viewthread.php?action=printable&tid=5278
    grazie giorgio per questo articolo che mi ha dato il “coraggio” di mettere le mani su un driver ^^!!!
    Laura.

  2. E ti pareva…i vizi sono duri a sparire.

    Forza, dopo la prima volta modificare un driver mette meno patemi d’animo 🙂

    Complimenti!

  3. Grazie mille,

    sia a Giorgio che ha aperto la discussione e ha infuso coraggio anche a me… spero non troppo se no mi dovrò abituare ai Kernel Panic 😉 …. e anche a Laura che grazie al suo link ho corretto nello specifico il mio problema.

    Fabio

    P.S..
    come minimo mi aspettavo che provassero a compilarli prima di metterli su sito…

  4. Grazie ragazzi! mi avete salvato un sacco di notti insonni 😉

  5. Grande! non sai quanto sto sclerando per far funzionare ‘sto driver!
    Speriamo bene.
    Se funziona ti linko sul forum di Ubuntu

  6. La versione 1.05 dei driver sembra essere stata corretta.

  7. Ciao!

    Ho dei problemi a compilare l’ultima versione dei driver per l’ultima serie di kernel… sai darmi qualche informazione in merito?

    Grazie 🙂

  8. Ciao,

    prova a copiare qui i messaggi di errore che ti vengono indicati.

  9. Eccoli:

    alessio@quadrispro-laptop:~/Scrivania/r8101-1.007.00$ sudo -s
    root@quadrispro-laptop:~/Scrivania/r8101-1.007.00# make clean modules
    make -C src/ clean
    make[1]: Entering directory `/home/alessio/Scrivania/r8101-1.007.00/src’
    rm -rf *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags .tmp_versions Module.symvers Modules.symvers rset
    make[1]: Leaving directory `/home/alessio/Scrivania/r8101-1.007.00/src’
    make -C src/ modules
    make[1]: Entering directory `/home/alessio/Scrivania/r8101-1.007.00/src’
    make -C /lib/modules/2.6.24-19-generic/build SUBDIRS=/home/alessio/Scrivania/r8101-1.007.00/src modules
    make[2]: Entering directory `/usr/src/linux-headers-2.6.24-19-generic’
    CC [M] /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.o
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c: In function ‘rtl8101_init_board’:
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:2244: error: implicit declaration of function ‘SET_MODULE_OWNER’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c: In function ‘rtl8101_init_one’:
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:2643: error: ‘struct net_device’ has no member named ‘poll’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:2644: error: ‘struct net_device’ has no member named ‘weight’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c: In function ‘rtl8101_rx_interrupt’:
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3686: error: ‘struct net_device’ has no member named ‘quota’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3686: warning: type defaults to ‘int’ in declaration of ‘_y’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3686: error: ‘struct net_device’ has no member named ‘quota’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3686: warning: comparison of distinct pointer types lacks a cast
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c: In function ‘rtl8101_interrupt’:
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3866: error: too few arguments to function ‘netif_rx_schedule_prep’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3867: error: too few arguments to function ‘__netif_rx_schedule’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c: In function ‘rtl8101_poll’:
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3913: error: ‘struct net_device’ has no member named ‘quota’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3913: warning: type defaults to ‘int’ in declaration of ‘_y’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3913: error: ‘struct net_device’ has no member named ‘quota’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3921: error: ‘struct net_device’ has no member named ‘quota’
    /home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.c:3924: error: too few arguments to function ‘netif_rx_complete’
    make[3]: *** [/home/alessio/Scrivania/r8101-1.007.00/src/r8101_n.o] Error 1
    make[2]: *** [_module_/home/alessio/Scrivania/r8101-1.007.00/src] Error 2
    make[2]: Leaving directory `/usr/src/linux-headers-2.6.24-19-generic’
    make[1]: *** [modules] Error 2
    make[1]: Leaving directory `/home/alessio/Scrivania/r8101-1.007.00/src’
    make: *** [modules] Error 2

    Questa è la versione del kernel (uso Ubuntu 8.04 «Hardy Heron»):
    2.6.24-19-generic

  10. Non saprei che dirti su questo tipo di errore, prova a dare un’occhiata a questo thread:

    http://forum.ubuntu-it.org/index.php?topic=182174.msg1206942

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.