Fixing 3c59x.c to Avoid Invalid Checksum Errors

For some versions of the 3Com 59x cards, the 3c59x module gives the following error at boot:
***INVALID CHECKSUM 00b7*** <3>*** EEPROM MAC address invalid
This error also is listed by dmesg. It can be filtered with the command
dmesg | egrep -i invalid
Donald Becker wrote this driver, and discussed this error message here.
To paraphrase, he says:
This is harmless, as long as it happens on the new 3c905C cards. It exists because 3Com continues to stuff more info into the EEPROM. Rather than computing a checksum over the whole EEPROM, or having a backwards-compatible subset and retaining the old checksum location, they keep moving the checksum word a few bytes at a time.
The "solution" in the updated drivers is to just omit the warning with new cards. I've never seen a report of EEPROM that became spontaneously corrupted.
To alter the code, install the kernel source code and find the file 3c59x.c, by doing the follow:
  1. cd /usr/src
  2. find -type f -print | egrep 3c59x.c
  3. change to that directory
Then in a text editor, open the file 3c59x.c and comment out the if statements which check for these errors.
For example, look at these two soure files: After you have fixed the source code, do the usual procedure to recompile the kiernel.
  1. cd /usr/src
  2. make; make modules; make modules_install;
  3. cp arch/i386/bzImage /boot/CHOOSE_A_FILE_NAME
  4. alter lilo.conf or grub.conf, and rerun the boot loader
  5. add 3c59x to the automatically loaded modules. The particulars of this step depend on your flavor of linux. For Gentoo the command is: "echo 3c59x >> /etc/modules.autoload.d/KERNELVERSION"
  6. Reboot the machine, and check that the error message has disappeared