Selecting and configuring Ethernet drivers

Knowing how to select the right ethernet driver module and configure it is a big hairy subject in its own right.  

Consult the Linux Ethernet-Howto.  Use, but don't trust the documentation.  Read between the lines.  If it doesn't work according to the documentation, try something different.  Consult your friends.  

Some drivers, especially for some of the old ISA cards, are goofy.  Some drivers require you to specify the io and irq parameters.  Some require you to NOT specify the io and irq parameters.  Some drivers don't care if you specify the io and irq parameters.  Some drivers ignore what you specify.  Some drivers can only be used for one card in a machine.  For example, the ne driver for NE2000 cards will not work with two NE2000 cards in one machine.  Most of these wierdnesses are not documented or are documented poorly.  By the way, if you use two cards of the same kind, it can be unclear which one is for the internet and which one is for your local network.  You can avoid this uncertainty by using different kinds of network cards.  

PCI ethernet cards

PCI ethernet cards are easier to work with than ISA ethernet cards.  You only need to know the module name.  You don't have to specify I/O addresses or IRQ numbers.  An easy way to figure out what driver module is required for a PCI ethernet card, is to let your regular desktop Linux (like Red Hat) figure it out.  Without the card installed in your desktop Linux computer, run /sbin/lsmod and write down the output.  Shutdown the computer, install the PCI ethernet card, boot the computer and run /sbin/lsmod again.  The name at the beginning of the new line is the name of the driver module for your card.  For example, if the old output of /sbin/lsmod is:

Module                  Size  Used by    Not tainted
ac97_codec             11904   0 (autoclean) [trident]
soundcore               6692   2 (autoclean) [trident]
sis                    53152   1
sis900                 15140   1
tulip                  43104   1

and the new output of /sbin/lsmod is:

Module                  Size  Used by    Not tainted
ac97_codec             11904   0 (autoclean) [trident]
soundcore               6692   2 (autoclean) [trident]
sis                    53152   1
sis900                 15140   1
tulip                  43104   1
eepro100               20240   2

then the new line:

eepro100               20240   2

is is for the PCI ethernet card you just put in.  The first word on the new line, is the name of the driver module: eepro100.  Adding ".o" to that driver module name yields the name of the file that the driver module is in:

eepro100.o.  

ISA ethernet cards

ISA cards require expertise.  Generally, you have to manually configure the card, know what driver module to use and know what parameters the driver module wants.  You can try to figure out which module to use (and maybe even the io and irq parameters (/etc/modules.conf?)) with the same technique as for PCI cards, but don't be surprised and brokenhearted if it doesn't work.  You often have to specify the starting I/O port address and IRQ to the driver module.  Avoid Plug and Play.  If you can, manually configure the starting I/O port address and IRQ for the card.  Avoid putting the I/O at 0x300, since much probing of cards is done at that address that often messes up the ethernet cards.  Avoid Plug and Play.  Some cards are configured with jumpers.  Some are configured by software; typically with a utility that runs until DOS.  

Many drivers are variations on a common theme, and come in two or more parts.  One part for the common stuff, and another part for the special differences.  For example, the classic Novell NE2000 uses two drivers, the "ne" driver and the "8390" driver.  The "8390" driver is for the stuff common to the controller chip used by that ethernet card and many others.  The "ne" driver is for the stuff particular to the NE2000 ethernet card.  In the documentation for the Novell NE2000, the driver name is listed as:

... Driver Name: ne (+8390)

When you specify the modules to linux, you must specify the extra module first.  The extra module is the one with a '+' in front of it and surrounded by parentheses.  I.e., specify the "8390" driver module first, then the "ne" driver module.  Another oddity is that if more than one card needs the same extra module, you only need to specify the extra module once.  For example, if you have a Novell NE2000 and an SMC WD8013 card, you would specify the "8390" driver module once.  (It would also be specified before both the "ne" and "wd" modules.)  

Remember, use, but don't trust the documentation.  Read between the lines.  If it doesn't work according to the documentation, try something different.  Consult your friends.  

"Adventure is a sign of incompetence" Vilhjalmur Stefanson

Last modified 2003-05-12