[Actualización 25-Abr-2016]
Varios años después de haber publicado el artículo original me encuentro nuevamente con el mismo problema, pero también con una solución mucho más simple gracias a este hilo de ubuntuforums y a haber averiguado que la solución era definir la MTU a 1496 en lugar del valor de 1500 predeterminado. Aparentemente este es el máximo soportado por este driver antes de volverse inestable.
El MTU se define mediante DHCP, pero podemos ignorar eso agregando dos líneas a /etc/dhcp/dhclient.conf
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
send host-name = gethostname();
#éstas dos líneas fueron agregadas antes de la línea request
default interface-mtu 1496;
supercede interface-mtu 1496;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers,
dhcp6.fqdn, dhcp6.sntp-servers;
Tras guardar el archivo con esos cambios reinicié el equipo para verificar, el MTU era de 1496 y la tarjeta permite acceder a la red sin inconvenientes.
[Artículo Original]
Este instructivo esta probado en una placa madre ASUS P5SD2-VM con chipset SiS968. Sistema operativo Ubuntu 8.04.01 kernel 2.6.24-21-generic
La alternativa corta consiste en copiar el SiS190.ko de la siguiente manera, reiniciar la PC y configurar la interfaz de red con el direccionamiento IP de tu red
sudo cp /”ruta donde se ecuentra archivo”/sis190.ko /lib/modules/`uname -r`/kernel/drivers/net
El archivo provisto ya se encuentra compilado con las modificaciones hechas en el fuente que subsanan los errores de acuerdo a la información recabada en distintos foros sobre el funcionamiento esta tarjeta.
Si habiando seguido estos pasos estás como al principio no te queda otra que seguir el camino más largo.
$ sudo uname -r
cuyo resultado será similar a
2.6.24-21-generic
Tenemos dos alternativas para bajar de internet los fuentes del kernel, una con el gestor de paquetes en modo gráfico. Para lo cual haces clic en el boton buscar y colocas como criterio de busqueda la palabra “linux-source”.
En el resultado de la búsqueda deberemos tildar ‘linux-source-2.6.24‘ y ‘Aplicar‘ para instalar.
Ahora, quienes prefieren manejarse con la consola pueden hacer lo mismo de la siguiente manera
$ sudo apt-get install linux-source-2.6.24
El proceso de instalación es automático. Una vez que haya termino debemos descomprimir el kernel:
$ cd /usr/src/`uname -r` /drivers/net
$ sudo cp /”ruta donde se ecuentra archivo”/sis190.c /usr/src/linux-source-2.6.24/drivers/net
Si no pide confirmación para reemplazar el archivo en el destino debemos responder afirmativamente. Se recomienda hacer una copia de seguridad del archivo de destino antes de reemplazarlo.
Nos ubicamos en la carpeta de fuentes y ejecutamos menuconfig
$ cd /usr/src/`uname -r` / $ make menuconfig
En caso que este último comando no de un error al compilar deberemos bajar libncurses5-dev
$ sudo apt-get install libncurses5-dev $ sudo make modules
La ejecución de éste último comando puede tardar bastante tiempo dado que vuelve a crear el arbol de modulos del kernel. Y si bien esto puede ser interrumpido en cualquier momento, sugerimos dejarlo terminar.
La idea de ejecutar el comando make modules es que el sistemas cree los temporarios necesarios para compilar el kernel, si esto no ocurre, al momento de volver a compilar el sistema va a arrojar un error.
Otra alternativa es crear una carpeta temporaria:
$ sudo mkdir .tmp_versions
Tras haber finalizado la compilación ejecutamos:
$ sudo make drivers/net/sis190.ko $ sudo rmmod drivers/net/sis190.ko $ sudo insmod drivers/net/sis190.ko $ sudo cp drivers/net/sis190.ko /lib/modules/`uname -r`/kernel/drivers/net $ sudo modprobe -v -r sis190
Luego apagamos la PC, removemos la tarjeta de red adicional y la encendemos nuevamente. Configuramos la tarjeta onboard sis191 para ver si fuciona.
A continuación te mostramos los comandos necesarios para saber cual es el problema de la placa así como cuál deberia ser la salida de ciertos comandos cuando esta funcionando correctamente.
$ sudo mii-diag ethX –force
Siendo X la tarjeta de red en cuestión, en tu pc puede estar identificada como eth0, eth1, eth2, etc.
Basic registers of MII PHY #1: 3100 796d 004d d021 01e1 45e1 0003 0000. The autonegotiated capability is 01e0. The autonegotiated media type is 100baseTx-FD. Basic mode control register 0x3100: Auto-negotiation enabled. You have link beat, and everything is working OK. Your link partner advertised 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT, w/ 802.3X flow control. End of basic transceiver information.
$ sudo lshw -C network sis190 Gigabit Ethernet driver 1.2 loaded. ACPI: PCI Interrupt 0000:00:04.0[A] -> GSI 19 (level, low) -> IRQ 16 PCI: Setting latency timer of device 0000:00:04.0 to 64 0000:00:04.0: Read MAC address from APC. 0000:00:04.0: Unknown PHY transceiver at address 1. 0000:00:04.0: Using transceiver at address 1 as default. 0000:00:04.0: SiS 191 PCI Gigabit Ethernet adapter at f8828c00 (IRQ: 16), 00:1d:60:0b:14:3d eth0: RGMII mode. eth0: Enabling Auto-negotiation.
Basic registers of MII PHY #1: ffff ffff ffff ffff ffff ffff ffff ffff.
Cuando la tarjeta SIS191 no funciona correctamente vemos lo siguiente:
$ lshw -C network WARNING: you should run this program as super-user. *-network description: Ethernet interface product: 191 Gigabit Ethernet Adapter vendor: Silicon Integrated Systems [SiS] physical id: 4 bus info: pci@0000:00:04.0 logical name: eth0 version: 02 serial: 00:1f:c6:af:3c:70 width: 32 bits clock: 33MHz capabilities: bus_master cap_list ethernet physical configuration: broadcast=yes driver=sis190 driverversion=1.2 latency=0 module=sis190 multicast=yes
$ sudo mii-diag --force Using the default interface 'eth0'. Basic registers of MII PHY #0: ffff ffff ffff ffff ffff ffff ffff ffff. No MII transceiver present!. The autonegotiated capability is 03e0. The autonegotiated media type is 100baseTx-FD. Basic mode control register 0xffff: Auto-negotiation enabled. Internal Collision-Test enabled! Restarted auto-negotiation in progress! Transceiver isolated from the MII! Transceiver powered down! Transceiver in loopback mode! Transceiver currently being reset! Basic mode status register 0xffff ... ffff. Link status: established. Remote fault detected! *** Link Jabber! *** Your link partner advertised ffff: Flow-control 100baseT4 100baseTx-FD 100baseTx 10baseT-FD 10baseT, w/ 802.3X flow control. End of basic transceiver information.
Hemos marcado en negrita las líneas que demuestran que la tarjeta no esta funcionando correctamente
$ dmesg | egrep -i '00:04.0' [ 46.991810] ACPI: PCI Interrupt 0000:00:04.0[A] -> GSI 19 (level, low) -> IRQ 19 [ 46.991826] PCI: Setting latency timer of device 0000:00:04.0 to 64 [ 46.991835] 0000:00:04.0: Read MAC address from APC. [ 47.039585] 0000:00:04.0: Unknown PHY transceiver at address 1. [ 47.586904] 0000:00:04.0: SiS 191 PCI Gigabit Ethernet adapter at ffffc200008b8c00 (IRQ: 19), 00:1f:c6:af:3c:70