Realtek RTL8168: Instalando el driver en Debian

Publicado por Diego Córdoba en

Hoy les traigo una guía para compilar desde los fuentes el controlador de la placa de red Realtek RTL8168 en GNU Linux Debian para tener mejor rendimiento.

NOTA: Artículo en revisión… originalmente fue escrito en enero de 2015… y han pasado muchas cosas desde entonces 🙂

https http apache debian ssl tls

A quien no le pasó que instaló Debian en un equipos que tiene una tarjeta de red Realtek RTL8168 y el sistema carga por defecto el módulo RTL8169.
En la mayor parte de los casos no habrá problemas, pero podemos tener ciertos inconvenientes, por ejemplo, nuestra tarjeta de red no transmitirá a mas de 200 Kbps, o por ejemplo, estará transmitiendo normalmente, y de repente se cortará la transmisión por cerca de un minuto, y volverá a transmitir.

Nuestra tarjeta de red y nuestro módulo

Veamos primero cuál es el modelo de nuestra tarjeta de red:

diego@sol:~$ lspci|grep Ethernet
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

Como se ve, es una tarjeta Realtek RTL8111/8168/8411… veamos qué módulo de red realtek ha cargado Linux al inicio:

diego@sol:~$ lsmod|grep r81
r8169                 428515  0

Como vemos, es el módulo equivocado para nuestra tarjeta.

Compilando el nuevo módulo realtek

Descarguemos entonces el módulo correcto para nuestra tarjeta. En mi caso bajé los fuentes de la tarjeta desde el sitio oficial de Realtek, pero luego dieron de baja el link, así que comparto el archivo que descargué en su momento:

http://recursos.juncotic.com/8.046.00.tar.gz

Luego instalemos algunas utilidades necesarias para poder compilar y construir nuestro módulo:

sudo apt-get install build-essentials linux-headers-$(uname -r)

El archivo descargado será, por ejemplo: 8.046.00.tar.gz

Lo descomprimimos y desempaquetamos:

tar -xvzf 8.046.00.tar.gz

Esto, por ejemplo, nos creará el directorio del código fuente del controlador, entraremos a él:

cd r8168-8.046.00/

y compilamos e instalamos con el script automático provisto. Este comando debemos ejecutarlo como root para que tenga efecto en el sistema:

root@debian9:/tmp/r8168-8.046.00# ./autorun.sh 

Check old driver and unload it.
Build the module and install
Backup r8169.ko
rename r8169.ko to r8169.bak
DEPMOD 4.9.0-8-amd64
load module r8168
Updating initramfs. Please wait.
update-initramfs: Generating /boot/initrd.img-4.9.0-8-amd64
Completed.

Luego verificamos que el nuevo controlador haya sido cargado con éxito:

diego@sol:~/opt/realtek$ lsmod|grep r81
r8168                 428515  0

Como vemos, es el módulo correcto. En el caso de que no se haya levantado el módulo, podremos bajar manualmente el módulo anterior, y levantar el nuevo con los siguientes comandos, respectivamente:

sudo rmmod r8169
sudo modprobe r8168

Ahora, deberemos cargar en la lista negra de módulo al viejo r8169 para que no sea montado al inicio del sistema (como superusuario):

echo “blacklist r8169″ >> /etc/modprobe.d/blacklist.conf

Conclusiones:

Si ahora verificamos el modelo de nuestra controladora de red y el módulo que está en uso para la misma, deberíamos tener una salida como la siguiente:

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
    Subsystem: ASRock Incorporation Motherboard (one of many)
    Flags: bus master, fast devsel, latency 0, IRQ 42
    I/O ports at e000 [size=256]
    Memory at f0404000 (64-bit, non-prefetchable) [size=4K]
    Memory at f0400000 (64-bit, prefetchable) [size=16K]
    Capabilities: [40] Power Management version 3
    Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [70] Express Endpoint, MSI 01
    Capabilities: [b0] MSI-X: Enable- Count=4 Masked-
    Capabilities: [d0] Vital Product Data
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [140] Virtual Channel
    Capabilities: [160] Device Serial Number 01-00-00-00-68-4c-e0-00
    Capabilities: [170] Latency Tolerance Reporting
    Kernel driver in use: r8168

Espero que les sirva como a mi! 🙂


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador