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 r8169nel 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:
Per poter compilare automaticamente il modulo ad ogni aggiornamento di kernel, e' necessario ricorrere al sistema dkms.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
Verifichiamo di avere installato dkms:
apt-get install dkms gccCreare il file:
dkms.confcon il seguente comando:
cat <ed eseguire i comandi seguenti:/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
dkms add -m r8168 -v 8.032.00Se non avete ricevuto errori, il vostro modulo e' stato installato correttamente e sara' ricompilato in automatico dal sistema ad ogni aggiornamento di kernel.
dkms build -m r8168 -v 8.032.00
dkms install -m r8168 -v 8.032.00
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 :)
Nessun commento:
Posta un commento