Un problema che mi è capitato di riscontrare durante l'installazione di una distribuzione Ubuntu, è stato il mancato funzionamento di una scheda di rete della Realtek, a causa del caricamento di un errato modulo del kernel.
Oggetto: Problema driver controller scheda di rete Gigabit Ethernet Realtek
HW:
RTL8168d/8111d PCI
OS: La guida va bene per una distribuzione basata su Debian
Modulo errato: r8169
Modulo corretto: r8168
Prerequisiti:
Per risolvere il problema è necessario procurarsi i driver della scheda di rete dal sito internet della Realtek (ovviamente accedendo da un altro PC, se come nel mio caso, non avete un altra scheda di rete a portata di mano da installare nel PC) .
Nel mio caso sono relativi ad una distribuzione Unix/Linux x86_64 con kernel 2.6.x .
Successivamente, come specificato nel file README dei driver, dobbiamo installare:
- controllare che la versione del driver scaricata sia supportata dal kernel in uso
- i sorgenti del kernel in uso
- avere installato un compilatore e il pacchetto binutils
Cosa fare:
Per scoprire la versione del kernel in uso digitare:
user@host:~$ uname -a
Linux anna 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Potete verificare se sul vostro sistema i sorgenti sono già installati (dpkg -l), oppure cercarli nell'elenco dei pacchetti disponibili (apt-cache search):
user@host:~$ dpkg -l | grep linux-source
user@host:~$ apt-cache search linux-source
...linux-source-2.6.38...
Installate i sorgenti del kernel (in questo caso 2.6.38):
user@host:~$ sudo apt-get install linux-source-2.6.38
Allo stesso modo controllate se avete installato già il pacchetto binutils e il compilatore.
Nell'archivio che scaricate è presente un file README che vi spiega come compilare i moduli del kernel per questo modello di scheda.
Quello che vi dovete ricordare di fare è semplicemente modificare i permessi della cartella estratta, altrimenti, sia che siate root o super utente con sudo, le operazioni dello script che compila e installa i moduli
del kernel, fallisce.
Ad esempio, se scarichiamo la versione r8168-8.029.00.tar.bz2 :
Scompattiamo l'archivio
user@host:~$ tar vjxf r8168-8.029.00.tar.bz2
Cambiamo i permessi della directory dei sorgenti src:
user@host:~$ cd r8168-8.029.00
user@host:~$ sudo chmod 777 -R src
NOTA: se non cambiate i permessi, quando tentate di eseguire lo script da super utente o da utente root, lo script fallirà perché non sarà in grado di creare un file log.txt (Permission denied); viceversa da utente normale riuscirà a compilare i moduli del kernel, ma non a copiarli nelle directory dei sorgenti del kernel in uso.
NOTA2: ogni volta che installerete e utilizzerete una versione nuova del kernel, sarete costretti a ripetere l'intera procedura.
Lanciamo lo script autorun.sh da super utente:
user@host:~$ sudo ./autorun.sh
Lo script si preoccupa di togliere il modulo vecchio r8169 e di compilare e copiare quello nuovo r8168.
Se tutto è andato a buon fine, ora il kernel dovrebbe avere caricato il modulo corretto
user@host:~$ lsmod | grep r8168
e potete configurare la vostra scheda di rete.