4/04/2012

HOWTO Realtek Under Linux

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:
  1. controllare che la versione del driver scaricata sia supportata dal kernel in uso
  2. i sorgenti del kernel in uso
  3. 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.