Linux Network Driver Updates for Kernels 1.2.0 through 2.4

Index

Release Information

This update contains two components:

  • A major update for most of the PCI network drivers
  • A device scan layer (See the PCI Scan) that allows a single driver to support PCI, hot-swap-PCI and CardBus hardware.

Using the Source RPM Package

The updated drivers are best installed by using the source RPM to create a custom binary RPM with kernel modules for your system:
ftp://ftp.scyld.com/pub/network/netdrivers-3.1-1.src.rpm

Use the following commands to install and test the driver pack:

# Transfer the Scyld PCI Netdriver package # Perhaps use ncftpget ftp://ftp.scyld.com/pub/network/netdrivers-3.1-1.src.rpm rpm -i ftp://ftp.scyld.com/pub/network/netdrivers-3.1-1.src.rpm # Build the binary version for your kernel cd /usr/src/{redhat,TurboLinux,packages}/ rpm -bb SPECS/netdriver*.spec # Now install it your newly built package. rpm -i --force RPMS/i386/netdrivers-3.1-1.i386.rpm

The --force option is needed because the new drivers may conflict with the existing drivers installed by the kernel package. If this occurs you will see a warning message for each driver that has been updated.


Installing Individual Drivers

Drivers may be updated individually by following the directions in http://scyld.com/expert/modules.html. You will need to build both the driver.o and pci-scan.o modules using the following source files from ftp://ftp.scyld.com/pub/network/

In the instructions below driver.c refers to the name of the driver source file for your device e.g. 3c59x.c, and driver.o refers to the compiled driver binary module.

  • Copy the driver source files to a convenient directory. I usually use /usr/src/modules/.
  • Compile both the driver file and pci-scan.c using the compile-command at the bottom of the source files. If a compile-command is not there use the following compile command: gcc -DMODULE -D__KERNEL__ -O6 -c driver.c gcc -DMODULE -D__KERNEL__ -O6 -c pci-scan.c

    With some distributions, especially those based on the 2.4 kernel, you may need to add the following options to the compile command

    -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h
  • As 'root', test the module by doing insmod pci-scan.o insmod driver.o
  • Install the modules in the proper location for your distribution. This is usually /lib/modules/kernel-version/net/driver.o. The command to do this is install -m 644 pci-scan.o driver.o /lib/modules/2.2.19-13.beo/net/ The uname -r command expands to the current kernel version name.

Special instructions for Red Hat 7.0

Red Hat 7.0 has a flawed configuration with their default install. The symptom is a variety of errors when trying to compile the driver update source RPM. The easiest work-around is to use a precompiled RPM for Red Hat 7.0 running the x86 uniprocessor kernel from ftp://ftp.scyld.com/pub/network/netdrivers-rh70.i386.rpm

Red Hat 7.0 uses the header files from an unreleased 2.3.99 kernel, rather than installing the header files from the kernel that is actually running. This was an attempt to make user-level binaries independent of the specific kernel version, but because the change was incompletely and badly implemented it's impossible to automatically build kernel modules. The easist solution is to use the Makefile packaged with the driver update, which explicitly detects and works around the flaws.

A second problem is that 7.0 provides an experimental version of gcc that was not intended for public release. The stable version of gcc needed to correctly compile the kernel has been renamed to kgcc.

The work-around is to substitute kgcc for gcc and to add -I/usr/src/linux/include on the compile command line when compiling by hand. The Makefile in the tar file and RPM automatically include this compile flag, and use 'kgcc' if it is available. However it is impossible to detect that 'kgcc' is required but not installed.

To repeat: these is a flaws that exist with Red Hat 7.0. It is a Red Hat configuration problem, not a driver update distribution bug. The symptom of this bug is compile error messages such as

tulip.c: In function tbusy' tulip.c:1438: structure has no member named
Linux Network Drivers Page
SCYLD information.
Author: Donald Becker
See the drivers for the contact email address. Do not bother sending email to zinc.anode@scyld.com, as email to that address adds your domain or IP address to the known-spammer list.