3.3. Instalación de una Ethernet

Las versiones actuales de GNU/Linux soportan una gran variedad de tarjetas Ethernet. La mayoria de los controladores fueron escritos por Donald Becker, que es el autor de los controladores para una familia de tarjetas basadas en el chip de National Semiconductor 8390; éstos son conocidos como las Series de Controladores de Becker. Aunque muchos desarrolladores también han contribuido, actualmente hay algunas tarjetas Ethernet comunes que no están soportadas por GNU/Linux. La lista de las tarjetas Ethernet soportadas crece continuamente, así que si su tarjeta de red no esta soportada ahora, pronto lo estará.

Algunas veces en la temprana historia de GNU/Linux hemos intentado hacer un listado de todas las tarjetas Ethernet soportadas, pero esto podría llevarnos mucho tiempo y espacio. Afortunadamente, Paul Gortmaker mantiene una lista con cada una de las tarjetas soportadas y el método para hacerlas funcionar bajo GNU/Linux, [1] Éste es enviado mensualmente al grupo de noticias comp.os.linux.answers, y también está disponible en cualquiera de las réplicas de la web del Linux Documentation Project.

Aun si está seguro de saber como instalar una tarjeta Ethernet particular en su máquina, a menudo merece la pena echar un vistazo a lo que pone en el Ethernet HOWTO. Podrá encontrar mucha información a parte de los simples asuntos de configuración. Por ejemplo, puede ahorrarle un montón de dolores de cabeza conocer el comportamiento de muchas tarjetas Ethernet basadas en DMA que usan el mismo canal DMA que la controladora SCSI Adaptec 1542 por omisión. Si no cambia una de ellas a un canal DMA diferente puede terminar con la tarjeta Ethernet escribiendo paketes de datos en lugares al azar de su disco duro.

Para usar cualquiera de las tarjetas Ethernet soportadas con GNU/Linux, debe usar un núcleo precompilado procedente de alguna de las principales distribuciones de GNU/Linux. Estos generalmente tienen modulos disponibles para todos los controladores soportados, y el proceso de instalación normalmente permite seleccionar qué controladores quiere cargar. A largo plazo, sin embargo, es mejor contruirse su propio núcleo y compilarlo sólo con los controladores que necesita; esto ahorra espacio y memoria.

3.3.1. Ethernet Autoprobing

Muchos de los controladores Ethernet de GNU/Linux son lo suficientemente listos para saber como encontrar a su tarjeta Ethernet. Esto le ahorra tener que decirle al núcleo dónde está. El Ethernet HOWTO tiene un listado donde pone qué controladores usan autoverificación y en qué orden buscan por las direcciones E/S a la tarjeta.

Hay tres limitaciones en el código de autoverificación. Primero, éste no reconoce bien todas las tarjetas. Esto es especialmente cierto para algunos clones de tarjetas habituales. Segundo, el núcleo no autocomprobará para buscar más de una tarjeta a no ser que se le ordene. Esto fue una concisa decisión de diseño, asumiendo que se quería tener el control sobre qué tarjeta es asignada a cada interfaz. La mejor manera de hacer esto con seguridad es configurar manualmente cada tarjeta Ethernet en su máquina. Tercero, el controlador puede que no busque en las direcciones en que su tarjeta está configurada. Generalmente hablando, los controladores autocomprobarán en las direcciones en que el dispositivo en particular es capaz de ser configurado, pero algunas veces ciertas direcciones son ignoradas para evitar conflictos de hardware con otros tipos de tarjetas que usan normalmente la misma dirección.

Las tarjetas de red PCI suelen ser detectadas correctamente. Pero si está usando más de una tarjeta, o si la autodetección falla, tiene una forma de decirle al núcleo la dirección base y el nombre de la tarjeta.

En el arranque puede dar al núcleo información y mandatos que cualquiera de los componentes de éste leerán. Este mecanismo le permite enviar información al núcleo que el controlador Ethernet pueda usar para localizar a su tarjeta Ethernet o hacer que la detecte.

Si usa lilo para arrancar, puede enviarle al núcleo parámetros especificándolos a través de la opción append en el fichero lilo.conf. Para informar al núcleo acerca de un dispositivo Ethernet puede escribir los siguientes parámetros:

    ether=irq,base_addr,[param1,][param2,]name

Los primeros cuatro parámetros son numéricos, mientras que el último es el nombre del dispositivo. Los parámetros irq, base_addr, y name son necesarios, pero los dos parámetros param son opcionales. Si cualquiera de los valores numéricos es puesto a cero, el núcleo determinará el valor por medio de la autoverificación.

El primer parámetro especifica el IRQ asignado al dispositivo. Por defecto, el núcleo intentará autocomprobar el canal IRQ del dispositivo. El controlador 3c503, por ejemplo, tiene una característica especial que selecciona un IRQ libre de entre el 5, 9, 3, 4 y configura la tarjeta para usar uno. El párametro base_addr proporciona la dirección base de E/S de la tarjeta, un valor de 0 le dirá al núcleo que pruebe las direcciones listadas arriba.

Varios controladores usan los dos parámetros siguentes de forma diferentes. Para tarjetas de memoria-compartida, como la WD80x3, éstos especificarán las direcciones de principio y final del área de memoria compartida. Otras tarjetas normalmente usan el param1 para especificar el nivel de información para debuging que es mostrada. Con valores del 1 al 7 variará la cantidad de información mostrada, con 8 no se mostrará nada; con 0 se usará el valor por omisión. El controlador 3c503 usa el param2 para elegir entre el transceptor (transceiver) interno (por defecto) o el transceptor externo (el valor de 1). El anterior usa el conector BNC de la tarjeta, el posterior usa el puerto AUI. Los argumentos de param no son necesarios en todo si no tiene nada especial que configurar.

El primer argumento no numerico es interpretado por el núcleo como el nombre del dispositivo. Debe especificar un nombre de dispositivo para cada tarjeta Ethernet.

Si tiene dos tarjetas Ethernet, puede dejar que Linux autodetecte una e indicarle los parámetros de la segunda con lilo, pero probablemente querrá configurar manualmente las dos. Si decide que el núcleo busque la primera y configurar manualmente la segunda, tendrá que asegurarse de que el núcleo no ha encontrado accidentalmente la segunda tarjeta primero, o cualquiera que no quiera que sea registrada. Haga esto introduciendo en lilo la opción reserve, con esto le dice al núcleo que evite la comprobacion de la direccion base E/S que usa la segunda tarjeta. Para hacer que Linux instale una segunda tarjeta Ethernet en 0x300 como eth1, tendrá que usar los siguientes argumentos en el núcleo:

    reserve=0x300,32 ether=0,0x300,eth1

La opción reserve asegura que ningún controlador accederá a la dirección E/S de la segunda tarjeta cuando compruebe algún dispositivo. También puede usar los parámetros del núcleo para evitar la autoverificación para eth0 :

    reserve=0x340,32 ether=0,0x340,eth0

También puede desactivar la autoverificación. Debe de hacer esto, por ejemlo, para detener la búsqueda de una tarjeta Ethernet que ha quitado temporalmente. Deshabilitar la autoverificación es tan simple como especificar el base_addr con un –1:

    ether=0,-1,eth0

Para indicar al núcleo éstos parámetros antes de arrancar, introducirá los parámetros en el indicador "boot:" del lilo. Para que lilo muestre el indicador "boot:", tiene que pulsar una de las siguientes teclas: Control, Alt o Shift, mientras lilo esté arrancando. Si pulsa la tecla del tabulador en el indicador, le aparecerá la lista de núcleos que puede arrancar. Para arrancar un núcleo con los parámetos suministrados escriba el nombre del núcleo que desea que arranque, seguido de un espacio, acompañándolo con el parámetro que desea. Cuando pulse la tecla Enter, lilo cargará ese núcleo y lo iniciará con el parámetro que ha escrito.

Para que este cambio ocurra automáticamente en cada arranque, introduzca los parámetros en el fichero /etc/lilo.conf usando la palabra append=. Quedando algo parecido a esto por ejemplo:
    boot=/dev/hda
    root=/dev/hda2
    install=/boot/boot.b
    map=/boot/map
    vga=normal
    delay=20
    append="ether=10,300,eth0"
    
    image=/boot/vmlinuz-2.2.14
    label=2.2.14
    read-only

Después de que haya editado lilo.conf, debe ejecutar lilo para activar el cambio.

Notas

[1]

en el Ethernet HOWTO, Paul puede ser localizado en gpg109@rsphy1.anu.edu.au