sk98lin driver disks for Red Hat Linux

COPYRIGHT

Please read the copyright that covers this work.

Download

If you just want to cut to the chase and get the driver disks I made, go download them.

Why I made them

In the course of my work as a systems administrator, I hand-built a couple of computers using the Asus P4P800 motherboard, which came out in mid-2003, shortly before I started using it. The motherboard is great, but as with many recently-arrived motherboards, there are a few problems you have to face when installing or using Linux on it.

The first thing I ran into (and the sole subject of this webpage) is that the on-board gigabit ethernet interface is not supported by the Red Hat Linux 9 kernels that I was using. In particular, it is not supported by the RH 2.4.20-8 kernel that is used in the installation process. Nor is it supported by the errata kernels (up through at least 2.4.20-19.9) nor in the mainline kernel 2.4.21.

One way around this is to install a standard ethernet card that is well-supported by standard kernels. Yeah... But that's not my style. :)

Another way around this is to install from CD, then download the driver supplied by Asus and install it in your already-installed system. Yeah... But I really, really wanted to use my network kickstart infrastructure to install Red Hat 9 on these machines. I did not want to do a manual install with the CDs. As a sysadmin, I very much like the consistency across machines that I get by using a kickstart installation. It's also important to me to have a centralized installation configuration and reduced installation labor, both of which a network kickstart installation provides.

Besides all that, I'm stubborn and I like learning new fundamental things. :) So I set out to figure out how to use the on-board network interface during the network kickstart, as well as after the installation was complete.

sk98lin

The first thing I discovered was that the drivers provided by Asus appear to be a version of the sk98lin driver (from SysKonnect) hacked by 3Com's engineers, to support 3Com's 3C940 chip, which is the chip that provides the gigabit ethernet on the Asus P4P800. It's worth noting also that this same chip appears on Asus's P4C800, so the driver disks I've created should work on those boards as well (I don't have a P4C800 to verify this with).

But the 3Com driver provided by Asus appears to have branched from sk98lin quite a while ago, so I checked to find out whether the latest sk98lin from SK supports the 3C940. Sure enough, it does.

I fumbled around for a while before I resolved to create sk98lin driver disks that contain the latest sk98lin from SysKonnect. Then I fumbled around some more before I actually managed to create working disks and use them in my network kickstart. I won't write up all the blind alleys I pursued. Let me just point out that along the way I participated in a couple of conversations on Red Hat forums, which you might like to check out. First of all, I participated in a conversation in a Red Hat bugzilla bug. Second, I started a thread on the Red Hat Linux developers mailing list. A handful of people made some useful contributions in these conversations, and I thank them.

I also had some email conversations with Terry Appling, in SysKonnect's U.S. tech support group. Terry has been very helpful and welcoming throughout. Thanks Terry!

In the end, I used the kernel 2.4.21 patch provided by SysKonnect, and their "InstallPackage" as the core of the driver disks I made. (If you want to download from either of those SK pages, click on the diskette icon. Also, note that version or paths may have changed, so you may want to navigate from the SysKonnect homepage.)

Making the driver disks

Besides the SysConnect driver source, the other critical part in making a sk98lin driver disk is a Device Driver Update Disk Devel Kit made by Red Hat's Doug Ledford. I've written a page about how to use this kit. In making the sk98lin driver disks, mostly I just followed Doug's README. But along the way, I learned some extra necessary or helpful details, which I describe on my driver disk page.

There are a few specific things I had to do with sk98lin which I do not discuss on my driver disk page. First of all, in order to get a complete set of sk98lin source code files, I chose not to work with the kernel patch. Instead, I worked with the "InstallPackage". After extracting the files from the InstallPackage, one of the files that gets extracted is sk98lin.tar.bz2. This file contains the sk98lin source code. You'll want to extract it into a subdirectory somewhere; the tarfile does not make its own toplevel subdirectory.

I took all those source files and put them into the copy of Doug's kit that I extracted, in the directory mod_devel_kit/net/sk98lin/. I then had to add five files to mod_devel_kit/net/sk98lin/ (as described in Doug's README and on my driver disk page): disk-info, modinfo, modules.dep, Makefile, and pcitable.

To ease the path of anyone who follows me, I've provided these files for download. Feel free to modify these files on your own -- there's nothing particularly difficult about them. But do read Doug's README and my driver disk page in order to understand more about them.

There's nothing special about disk-info, modinfo, or modules.dep. The other two files are a bit more interesting. I have some comments about pcitable on my driver disk page that you need to be aware of if you modify that file. Let me describe how I generated the contents of both of these files.

I generated pcitable by reading the definition of SK_PCI_ISCOMPLIANT in skdrv2nd.h (which is in the h/ subdirectory of the sk98lin driver source). I think that's pretty straightforward. I tried to use names that fit with those in /usr/share/hwdata/pcitable on Red Hat Linux 9.

I generated the Makefile by combining two sources. This may not have been the absolute best way to do this, but it worked. :) I started with /usr/src/linux-2.4.20-19.9/drivers/net/sk98lin/Makefile. But (as I found out the hard way), that Makefile isn't complete for recent versions of sk98lin. I had to add one .o file to the list at the top of the Makefile. and I had to define a couple of macros with -D. I figured this out partly the hard way, and partly by looking at the Makefile code in the InstallPackage's install.sh, and the Makefile diff in the kernel patch.

Once all that was together, I produced driver disks in the way described in Doug's README, and they worked! I have successfully used them to do a network kickstart on the Asus P4P800.

Future steps

I consider these driver disks to be a temporary measure. Hopefully in the near term, they will no longer be necessary, because the updated sk98lin drivers will be in the mainline kernel. But someone has to do the work to get a recent sk98lin accepted by the kernel maintainers.

It's worth noting that Red Hat will not incorporate the updated sk98lin into their kernels as a patch. They need the drivers to be incorporated into the mainline kernel, and then Red Hat will automatically provide these drivers in their kernels, and Red Hat kernels will support recent sk98lin cards and chips like the 3C940. You can read the mailing list thread for details if you wish.

Updating the latest sk98lin drivers and submitting them to the kernel maintainers will naturally fall on the SysKonnect driver maintainers. Before SK's sk98lin is accepted by the kernel maintainers, they'll have to check the mainline kernel version of sk98lin to find any patches that have been applied in the mainline kernel (but not in the SK branch). They may also wish to apply a patch that occurs in recent Red Hat kernels (in the kernel src.rpm, it's linux-2.4.1-compilefailure.patch).

As I say, most of this will fall on the SysKonnect driver developers. I've already talked with Terry Appling in their support department about this, and will shortly be contacting the developers directly. Hopefully before long, the latest sk98lin drivers will be in the latest 2.4 and 2.6-test kernels.


If you see any errors on this page, would like to suggest additions or changes, or want to contact me for any other reason, my email address is kewley<at>klab.caltech.edu

David Kewley

Last modified 2003.11.05