Visualizzazione post con etichetta dkms. Mostra tutti i post
Visualizzazione post con etichetta dkms. Mostra tutti i post

sabato 19 ottobre 2013

Linux: Problemi di connessione con Realtek r8169 / r8111

Le schede indicate nel titolo vengono spesso riconosciute da Linux come delle r8169 e quindi il sistema provvede a caricare il modulo r8169 che potrebbe darvi qualche problema.

Su una Ubuntu 12.04LTS il driver r8168  e' già compilato all'interno del kernel di default. In questo caso sara' sufficiente bloccare il caricamento del modulo sbagliato inserendo la riga:
blacklist r8169 
nel file:
/etc/modprobe.d/blacklist-network.conf

Per altri sistemi che non avessero il driver r8168 precompilato nel kernel consigliamo di seguire la procedura seguente:
cd /usr/src
wget http://djlab.com/stuff/r8168-8.032.00.tar.bz2
tar jxvf r8168-8.032.00.tar.bz2
cd r8168-8.032.00
make clean modules
make install
depmod -a
echo "blacklist r8169" >> /etc/modprobe.d/blacklist-network.conf
update-initramfs -u
Per poter compilare automaticamente il modulo ad ogni aggiornamento di kernel, e' necessario ricorrere al sistema dkms.
Verifichiamo di avere installato dkms:
apt-get install dkms gcc
Creare il file:
dkms.conf
con il seguente comando:
cat < /usr/src/r8168-8.032.00/dkms.conf
PACKAGE_NAME=r8168
PACKAGE_VERSION=8.032.00
MAKE[0]="'make'"
BUILT_MODULE_NAME[0]=r8168
BUILT_MODULE_LOCATION[0]="src/"
DEST_MODULE_LOCATION[0]="/kernel/updates/dkms"
AUTOINSTALL="YES"
EOF
ed eseguire i comandi seguenti:
dkms add -m r8168 -v 8.032.00
dkms build -m r8168 -v 8.032.00
dkms install -m r8168 -v 8.032.00
Se non avete ricevuto errori, il vostro modulo e' stato installato correttamente e sara' ricompilato in automatico dal sistema ad ogni aggiornamento di kernel.

Se per caso, durante la compilazione del modulo, doveste avere errori del tipo:
root/r8168-8.035.00/src/r8168_n.c:14545: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘rtl8168_init_board’
Sara' necessario applicare la patch seguente:
diff -ruB r8168-8.035.00/src/r8168_n.c r8168-8.035.00/src/r8168_n.c
--- r8168-8.035.00/src/r8168_n.c        2012-12-19 05:38:56.000000000 -0500
+++ r8168-8.035.00/src/r8168_n.c        2013-03-17 12:48:58.693002848 -0400
@@ -14541,7 +14541,7 @@
        spin_unlock_irqrestore(&tp->phy_lock, flags);
 }

-static int __devinit
+static int
 rtl8168_init_board(struct pci_dev *pdev,
                   struct net_device **dev_out,
                   void __iomem **ioaddr_out)
@@ -14711,7 +14711,7 @@
        goto out;
 }

-static void __devinit
+static void
 rtl8168_init_sequence(struct rtl8168_private *tp)
 {
        void __iomem *ioaddr = tp->mmio_addr;
@@ -14964,7 +14964,7 @@
 };
 #endif

-static int __devinit
+static int
 rtl8168_init_one(struct pci_dev *pdev,
                 const struct pci_device_id *ent)
 {
@@ -15128,7 +15128,7 @@
        return 0;
 }

-static void __devexit
+static void
 rtl8168_remove_one(struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
@@ -17649,7 +17649,7 @@
        .name           = MODULENAME,
        .id_table       = rtl8168_pci_tbl,
        .probe          = rtl8168_init_one,
-       .remove         = __devexit_p(rtl8168_remove_one),
+       .remove         = rtl8168_remove_one,
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,11)
        .shutdown       = rtl8168_shutdown,
 #endif

e ripetere la compilazione. Tutto qua :)



sabato 10 gennaio 2009

Problemi al boot: DKMS non riesce a compilare fglrx

Ad ogni aggiornamento di kernel, il sistema DKMS cerca di ricompilare i moduli da lui gestiti per poterli utilizzare anche con il nuovo kernel. Un esempio sono i moduli fglrx (driver ATI) e vboxdrv (Virtualbox).

Purtroppo non sempre la compilazione automatica termina con successo e durante la fase di boot vedete un fastidioso FAILED apparire sullo schermo.

Potete verificare lo stato del sistema DKMS con il seguente comando:
sudo dkms status

In caso potete provare a compilare voi il modulo che da' errore con il comando:
sudo dkms build -m NOMEMODULO -v NUMEROVERSIONE

Nel mio caso il problema era con i driver ATI (fglrx).

Ho controllato quale versione avessi installata con il comando:
dpkg -l | grep fglrx

ottenendo l'output seguente:
ii fglrx-amdcccle 2:8.543-0ubuntu4 ...
ii fglrx-kernel-source 2:8.543-0ubuntu4 ...
ii fglrx-modaliases 2:8.543-0ubuntu4 ...
ii xorg-driver-fglrx 2:8.543-0ubuntu4 ...

Bene, la versione installata e' la 8.543. Proviamo a ricompilare il modulo:
sudo dkms build -m fglrx -v 8.543

Nell'esempio seguente vediamo come generare il modulo per uno specifico kernel (in questo caso la release del modulo fglrx e' la 8.552:
sudo dkms -m fglrx -k 2.6.27-11-generic -v 8.552 build

Se ci sono problemi di compilazione saranno salvati nel file make.log contenuto in una cartella che vi sara' indicata nella segnalazione di errore.

AGGIORNAMENTO 01/04/2009

Dopo l'avvenuta compilazione, occorre installare il modulo con il seguente comando:
sudo dkms -m fglrx -k 2.6.27-11-generic -v 8.552 install

per verificare l'avvenuta installazione potete lanciare di nuovo il comando:
sudo dkms status