Categorías
General

[Como] SiS190/SiS191

[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.

En primer lugar, como no tenes conectividad de red trata de conseguir una tarjeta de red generica y agregarla a la pc para tener intenet y poder bajar los paquetes que abajo nombramos. Preferimos las Realtek 8029AS de 10mb, que son desde nuestro punto de vista muy faciles de conseguir y de instalar.
Una vez instalada y  configurada la tarjeta de red adicional para tener red es necesario identificar la version del kernel, para ello ingresamos en consola:

 

$ 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

 

Luego debemos copiar el archivo fuente del driver (SiS190.c), ya incluye las modificaciones para el correcto funcionamiento de la tarjeta:

 

$ 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.

 

Lo que se encuentra resaltado es el resultado que debiera mostrar cuando la tarjeta funciona correctamente, por supuesto los valores pueden cambiar. En caso de que la tarjeta no funcione el valor que esta en negrita sería similar a:

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


Estimamos que con solo copiar el sis190.ko en donde se indica la placa funcionaría. En el kernel 2.7 ya ha sido solucionado este inconveniente.